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안에 존재하는지 확인할 수 있을 뿐입니다.
'프로그래밍언어 > JavaScript' 카테고리의 다른 글
[JavaScript] 그림으로 이해하는 자바스크립트 Array (0) | 2023.08.17 |
---|---|
[JavaScript] Promise - callback 우아하게 처리하기 (0) | 2022.06.16 |
[JavaScript] Object Property enumeration (객체 속성 열거) (0) | 2022.06.15 |
[JavaScript] Iterator & Generator (0) | 2022.06.15 |
JavaScript // 개념 // ES6 // 심볼(Symbol) (0) | 2018.08.06 |