javascript

Map of JavaScript

JS에서의 Map은 키의 배열과 값의 배열 총 두개의 배열의 존재한다.

값을 찾을때는 키의 배열과 값의 배열을 순회하여 서로 인덱스가 일치할때 값을 회수한다. 따라서 O(n) 이다.

문제

  1. 요소 설정과 탐색이 O(n) 이다
    • 두 작업 모두 키 배열을 순회해서 맞는 키를 찾아야하기 때문에
  2. 메모리 누수가 발생할 수 있다.
    • 두 배열로 인해 각각의 키와 값에 대한 참조가 무한히 유지되기 때문이다. 따라서 키를 참조하는 곳이 아무데도 없어도, 배열의 참조로 인해 키가 가비지 컬렉션의 대상이 되지 않는다. (값의 배열도 마찬가지)

WeakMap

키가 오직 Object 타입만 사용할 수 있고, Sysbol, 원시값을 키로 사용할 수 없다.

약한 참조로 인해 WeakMap은 키를 열거할 수 없다. 키 목록을 가져오는 메소드가 존재하지 않는다.

키를 “약한” 참조만 가지고 있기때문에 가바지 컬렉션을 방지하지 않으며, 가비지 컬렉션 시 키 참조 역시 사라진다. 맵 내의 값 역시 “약한” 참조로서 가비지 컬렉션을 맞지 않는다

WeakMap은 키가 가비지 컬렉션 되지 않을때만 가치가 있는 정보를 키와 연결할 때 유용하다