Map of JavaScript
JS에서의 Map은 키의 배열과 값의 배열 총 두개의 배열의 존재합니다.
값을 찾을때는 키의 배열과 값의 배열을 순회하여 서로 인덱스가 일치할때 값을 회수합니다. 따라서 O(n) 입니다.
문제
- 요소 설정과 탐색이 O(n) 입니다
- 두 작업 모두 키 배열을 순회해서 맞는 키를 찾아야하기 때문입니다
- 메모리 누수가 발생할 수 있습니다.
- 두 배열로 인해 각각의 키와 값에 대한 참조가 무한히 유지되기 때문입니다. 따라서 키를 참조하는 곳이 아무데도 없어도, 배열의 참조로 인해 키가 가비지 컬렉션의 대상이 되지 않습니다. (값의 배열도 마찬가지)
WeakMap
키가 오직 Object 타입만 사용할 수 있고, Sysbol, 원시값을 키로 사용할 수 없습니다.
약한 참조로 인해 WeakMap은 키를 열거할 수 없습니다. 키 목록을 가져오는 메소드가 존재하지 않습니다.
키를 “약한” 참조만 가지고 있기때문에 가바지 컬렉션을 방지하지 않으며, 가비지 컬렉션 시 키 참조 역시 사라집니다. 맵 내의 값 역시 “약한” 참조로서 가비지 컬렉션을 맞지 않습니다
WeakMap은 키가 가비지 컬렉션 되지 않을때만 가치가 있는 정보를 키와 연결할 때 유용합니다