2 minute read

맴과 셋

객체, 배열 같은 자료구조 있지만 부족해서 탄생

  • 키가 있는 데이터 저장한다는 점에서 객체와 유사

    키에 다양한 자료형 허용함에 있어서 객체와 차이 있음

    키를 문자열로 변환하지 않고 그대로 유지

    키로 객체 허용

    • 주요 메서드, 프로퍼티

      • new Map() : 맵을 민듦. 각 요소가 키-값 쌍 배열이나 이터러블 객체를 초기화 용도로 인자에 전달해 새로운 맵 만들 수 있음.

      • map.set(key, value) – key를 이용해 value를 저장

      • map.get(key) – key에 해당하는 값을 반환. key가 존재하지 않으면 undefined를 반환.

      • map.has(key) – key가 존재하면 true, 존재하지 않으면 false를 반환.

      • map.delete(key) – key에 해당하는 값을 삭제.

      • map.clear() – 맵 안의 모든 요소를 제거.

      • map.size – 요소의 개수를 반환.

      • map[key] 사용 시 map을 객체로 취급. map엔 map 전용 메서드 사용해야 함.

    • map 이 키 비교 하는 방식

      sameValueZero 라는 알고리즘 사용.

      === 와 유사하지만 NaN 과 NaN 같다고 취급하는 것에서 차이 있음

      맵에선 NaN 도 키로 쓸 수 있음

      알고리즘 수정하거나 커스터마이징 불가능

    • 체이닝

      map.set은 호출할 때마다 맵 자신 반환하므로 체이닝 가능

    • 맵의 요소에 반복 작업

      • map.keys() : 각 요소 키 모은 후 이터러블 객체 반환

      • map.values() : 각 요소 모은 이터러블 객체 반환

      • map.entries() : 요소의 [키, 값] 한 쌍으로 하는 이터러블 객체 반환. 이 이터러블 객체는 for..of 반복문의 기초로 쓰임

      • map.forEach() : 배열과 유사하게 지원

    • Object.entries : 객체를 맵으로 바꾸기

      객체의 키-값 쌍을 요소([key, value]) 로 가지는 배열 반환

      map 의 인자에 삽입

    • Object.fromEntries : 맵을 객체로 바꾸기

      각 요소가 [키, 값] 쌍인 배열 객체로 변경.

      map.entries() 를 인자로 넣으면 일반 객체 변환

      인수로 이러터블 객체 받기 떄문에 entries() 안 붙여도 작동 같음

  • 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션

    유일무이함을 확인하는데 최적화

    배열에서 find 객체 사용해서 중복값 알아내는 것 보다 훨씬 빠름

    • 주요 메서드

      new Set(iterable) : 셋을 만듦. 이터러블 객체를 전달받으면(대개 배열을 전달받음) 그 안의 값을 복사해 셋에 넣어줌.
      set.add(value) : 값을 추가하고 셋 자신을 반환.
      set.delete(value) : 값을 제거. 호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환.
      set.has(value) – 셋 내에 값이 존재하면 true, 아니면 false를 반환.
      set.clear() – 셋을 비움.
      set.size – 셋에 몇 개의 값이 있는지 세줌.
      
    • 셋의 값에 반복 작업하기

      for..of, forEach 사용하면 셋 값 대상으로 반복 작업 수행 가능

      • forEach

        콜백 함수에서 세개 인수 받음

        값, 같은 값, 목표하는 객체 받음

        맵과의 호환성 위해 값이 두번 나옴

        맵, 셋은 서로 교체하기 쉬움.

      • 메서드

        set.keys() : 셋 내의 모든 값을 포함하는 이터러블 객체를 반환. set.values() – set.keys와 동일한 작업. 맵과의 호환성을 위해 만들어진 메서드. set.entries() – 셋 내의 각 값을 이용해 만든 [value, value] 배열을 포함하는 이터러블 객체를 반환. 맵과의 호환성을 위해 만들어짐.

요약

- 겍체, 배열같은 자료구조 부족해서 맵, 셋 탄생

- 맵은 키에 다양한 자료형 허용하며 값과 함께 저장

- 맵은 객체와 비교해 키 타입에 제약 없으며 size 프로퍼티 등의 유용한 메서드 존재

- 맵은 키를 문자열로 변환하지 않고 그대로 유지

- 맵의 다양한 메서드 존재

- map[key]는 map을 객체 처럼 취급하게 되어 올바른 방법 아님(get 권장)

- 객체의 키에 객체를 추가 시 객체는 문자열로 전환됨

- map은 키 비교할 떄 sameValueZero 라는 알고리즘 사용

- map.set은 호출 시 맵 자신이 반환되므로 체이닝 가능

- 맵은 이터러블 관련 다양한 메서드 존재

- Object.entries 로 객체를 키-값 쌍으로 바꾸어 맵으로 바꾸기 가능

- Object.fromEntries 로 맵을 Map.entries()로 키-값 쌍으로 만들어 객체로 바꾸기 가능

- 셋은 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션

- 셋 내장 메서드 존재.

- 셋 이터러블중 forEach 는 map과의 호환성 때문에 인자 3개 받음

- 맵과 셋은 서로 교체하기 쉬우며 호환성 어느정도 보장.

- 맵과 셋은 값을 추가한 순서대로 반복 작업 수행

Categories: ,

Updated: