프로그래밍언어/JavaScript

[JavaScript] Map & WeakMap, Set & WeakSet

문스코딩 2022. 6. 16. 10:16

Map&Set은 ES6에서 새롭게 추가된 데이터 구조입니다.

 

Map

Key-Value로 구성된 데이터구조입니다. 

 

WeakMap

(WeakMap에 대해 설명하기전에 먼저 Deep Copy, Weak Copy에 대해 이해하면 아래 내용을 쉽게 이해할 수 있을 것 입니다.)

 

  • 객체만을 키로 사용할 수 있습니다. (Primitive 타입은 키로 사용할 수 없습니다) 
  • 가비지컬렉션의 대상이됩니다.
  • Enumerable 하지 않습니다. (열거할 수 없습니다)

 

위의 사전적정의를 이해해보도록 합시다. 먼저 Map은 n개의 key배열이 있다면 반드시 n개의 value배열이 있을 것입니다. 만약 우리가 n-1번째 value값을 찾고자 한다면 key배열을 순회하여 일치하는 key를 찾고 그 인덱스를 이용하여 value배열에서 원하는 value를 찾을 것 입니다. 이 때 n의 숫자가 무한히 크다면 어떨까요? 메모리 누수가 발생할 수 있는 문제가 있습니다. 

 

반면 WeakMap은 key의 Weak Reference(약한 참조)만 가지고 있기때문에 WeapMap의 key, value는 가비지컬렉션의 대상이 될 수 있습니다. WeakMap은 내부적으로 Map과 달리 Weak Reference(약한 참조)로 구성되기 때문에 Enumerable 할 수 없습니다.  또한 참조로 구성되어 있기 때문에 key에 당연히 Primitive 타입을 사용할 수 없던 것이죠. 

 

이렇듯 WeakMap의 내부구조를 이해하게 되면 특징도 같이 이해할 수 있습니다.

 

Set

Set은 중복을 허용하지 않는 데이터구조입니다.

 

WeakSet

위에서 WeakMap의 구조를 이해했다면 WeakSet의 특징도 이해할 수 있을꺼라 생각됩니다.

  • 객체만을 키로 사용할 수 있습니다. (Primitive 타입은 키로 사용할 수 없습니다) 
  • 가비지컬렉션의 대상이됩니다.
  • Enumerable 하지 않습니다. (열거할 수 없습니다)


다음과 같은 특징을 가지고있기 때문에 실제 WeakSet의 용도는 매우 제한됩니다. 주어진 객체가 Set안에 존재하는지 확인할 수 있을 뿐입니다.

 

반응형