Map
ES6 에서 도입된 Map 은 key 와 value 로 이루어져 있는 반복 가능한 자료구조이다.
특징
- 제공되는 메서드를 통해 직관적인 코드 파악이 가능하다.
Map.set()
메서드를 통해 Map 객체에 key-value 로 이루어져 있는 프로터티 정보를 추가할 수 있다. (프로퍼티가 추가된 Map 객체를 반환)Map.get()
메서드를 통해 Map 객체에서 해당 key 의 value 값을 확인할 수 있다.Map.size
를 통해 Map 객체의 프로퍼티 수를 확인할 수 있다.Map.has()
메서드를 통해 해당 key 의 존재 여부를 확인할 수 있다.Map.delete()
메서드를 통해 해당 key 에 대한 프로퍼티를 제거한다. (해당 key 가 존재하면 true, 존재하지 않으면 false 를 반환)Map.clear()
메서드를 통해 Map 객체에 존재하는 모든 프로퍼티를 제거할 수 있다.Map.entries()
메서드는 프로퍼티, Map.keys()
메서드는 key 값, Map.values()
는 value 값에 대한 이터레이터를 반환하여 Map 객체를 순회할 수 있다. - 프로퍼티의 key 값에 모든 자료형을 지정할 수 있다.
- Map 은 이터러블 객체이기 때문에
for…of
문,forEach()
메서드를 통해 순회가 가능하다.
Object 와의 차이점
ㅤ | Object | Map |
key 자료형 | String, Symbol | any |
순서 보장 | x | o (추가 순) |
JSON 변환 | o | x |
순회 방법 | for…in, Object.prototype | for…of (이터러블) |
변경 작업에 대한 성능 최적화 | x | o |
Map 과 Object 의 변경
Map 을 Object 로 변경하려는 경우
Object.fromEntries()
메서드를 통해 변경할 수 있다.Object 를 Map 으로 변경하려는 경우
Object.entries()
메서드를 통해 변경할 수 있다.Set
Set 은 고유한 value 로 이루어져 있는 리스트이다.
value 값에 모든 자료형을 추가할 수 있고, 큰 특징으로는 value 값을 고유한 값으로 관리할 수 있다는 것이다.
특징
- 제공되는 메서드를 통해 직관적인 코드 파악이 가능하다.
Set.add()
메서드를 통해 값을 추가할 수 있다.Set.size
를 통해 추가한 값의 수를 확인할 수 있다. Set.has()
메서드를 통해 값의 존재 여부를 확인할 수 있다.Set.delete()
메서드를 통해 해당 값을 제거할 수 있다.Set.clear()
메서드를 통해 Set 객체의 모든 값을 제거할 수 있다.Set.entries()
메서드는 value-value 로 이루어진 배열을, Set.keys()
매서드와 Set.values()
는 value 값에 대한 이터레이터를 반환하여 Set 객체를 순회할 수 있다. (Set.keys()
메서드는 실제로 존재하지 않고 Set.values()
메서드에 대한 별칭으로 동작하기 때문에 결과가 같다.)- 프로퍼티의 key 값에 모든 자료형을 지정할 수 있다.
- 고유 value 값들로 이루어져 있다.
WeakMap
WeakMap 은 Map 과 비슷하지만 몇 가지 차이점이 존재한다.
ㅤ | Map | WeakMap |
key 자료형 | any | object (function, array 포함) |
순회 여부 (entries, for…of 등) | o | x |
가비지 컬렉션 대상 여부 | x | o |
WeakSet
WeakSet 도 Set 과 비슷하지만, 차이점이 존재한다.
ㅤ | Set | WeakSet |
value 자료형 | any | object (function, array 포함) |
순회 여부 (entries, for…of 등) | o | x |
가비지 컬렉션 대상 여부 | x | o |
이렇게 간단하게 개념만 정리해봤는데 지금까지 기존의 Object 만 사용을 해서인지 여러 가지 타입이 적용되는 게 아직은 어색한 것 같다…프로젝트를 진행하면서 최대한 활용을 해봐야겠다.
참고