[LearningJS] 맵(Map)과 셋(Set)
1. 맵(Map)
-
Key와 Value를 연결한다는 점에서 객체와 비슷하다.
-
키와 값을 연결하기 위해 객체를 사용할 경우의 단점
- 프로토타입 체인 때문에 의도하지 않은 연결이 생길 수 있다.
- 객체 안에 연결된 키와 값이 몇 개나 되는지 쉽게 알아낼 수 있는 방법이 없다.
- 키는 반드시 문자열이나 심볼이어야 하므로 객체를 키로 써서 값과 연결할 수 없다.
- 객체는 프로퍼티 순서를 전혀 보장하지 않는다.
-
맵 인스턴스 생성
const userRoles = new Map();
-
맵에 키를 할당
userRoles.set(u1, 'User').set(u2, 'User').set(u3, 'Admin');
const userRoles = new Map([ [u1, 'User'], [u2, 'User'], [u3, 'Admin'], ])
-
키를 호출
userRoles.get(u2);
-
맵에 키가 존재하는지 확인
userRoles.has(u2);
-
맵의 요소 숫자 확인
userRoles.size;
-
맵의 키 확인
userRoles.keys();
-
맵의 값 확인
userRoles.values();
-
[0]이 키이고 [1]이 값인 배열을 각각 반환
userRoles.entries();
keys()
,values()
,entries()
메서드가 반환하는 것은 모두 이터러블 객체이므로for...of
루프를 쓸 수 있다.
-
맵의 요소를 지울 때
userRoles.delete(u2);
-
맵의 요소를 모두 지울 때
userRoles.clear();
2. 위크맵(WeakMap)
-
객체 인스턴스의 전용(private) 키를 저장하기에 적합하다.
-
Map 과의 차이점
- 키는 반드시 객체여야 한다.
- WeakMap의 키는 가비지 콜렉션에 포함될 수 있다. (메모리 관리 가능)
- WeakMap은 이터러블이 아니며,
clear()
메서드도 없다.
3. 셋(Set)
-
중복을 허용하지 않는 데이터 집합
-
셋 인스턴스 생성
const roles = new Set();
-
셋 인스턴스에 키를 할당(추가)
roles.add('User');
- 중복된 요소가 있다면 추가되지 않는다.
-
셋 요소의 수
roles.size();
-
셋 요소 삭제
roles.delete('User');
- 요소가 있다면 true, 없으면 false를 리턴한다.
4. 위크셋(WeakSet)
- 주로 주어진 객체가 셋 안에 존재하는지를 알아보는 용도로 사용한다.
- 조건
- 객체만 포함
- 가비지 콜렉션 포함
댓글남기기