Map 과 Set


Map

ES6 에서 도입된 Map 은 key 와 value 로 이루어져 있는 반복 가능한 자료구조이다.

특징

  1. 제공되는 메서드를 통해 직관적인 코드 파악이 가능하다.
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 객체를 순회할 수 있다.
 
  1. 프로퍼티의 key 값에 모든 자료형을 지정할 수 있다.
 
  1. 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 값을 고유한 값으로 관리할 수 있다는 것이다.

특징

  1. 제공되는 메서드를 통해 직관적인 코드 파악이 가능하다.
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() 메서드에 대한 별칭으로 동작하기 때문에 결과가 같다.)
 
  1. 프로퍼티의 key 값에 모든 자료형을 지정할 수 있다.
 
  1. 고유 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 만 사용을 해서인지 여러 가지 타입이 적용되는 게 아직은 어색한 것 같다…프로젝트를 진행하면서 최대한 활용을 해봐야겠다.
 

 
참고