[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)

  • 주로 주어진 객체가 셋 안에 존재하는지를 알아보는 용도로 사용한다.
  • 조건
    • 객체만 포함
    • 가비지 콜렉션 포함

태그:

업데이트:

댓글남기기