[JavaScript] Weak Map, Weak Set

mechaniccoder·2020년 11월 8일
0
post-thumbnail

이 포스팅은 javascript.info를 참고했습니다.

Weak Map

위크맵을 왜 사용할까요? 이를 이해하기 위해서는 가비지 컬렉션을 알아야합니다. 추후에 가비지 컬렉션에 대해서 포스팅을 해보겠습니다.

일단 여기서는 간단하게 "도달 가능한 값을 메모리에 유지한다." 라고 생각하면 됩니다.

const target = { name: 'seunghwan'};

const array = [target];

target = null;

console.log(array[0].name); // 'seunghwan'

target을 null로 덮어씀에도 불고하고 array를 통해 접근할 수 있습니다. 따라서 가비지 컬렉터의 대상이 되지 않고 남아있을 수 있는 것입니다. 맵도 마찬가지입니다.

따라서 이를 해결하기 위해 위크맵이란 자료구조가 나온것입니다. 위크맵을 사용하면 위의 문제를 해결할 수 있기 때문이죠.

위크맵은 key에 오직 객체만을 가질 수 있다는 점이 맵과 다른 점입니다.

let john = { name: "John" };

const weakMap = new WeakMap();

weakMap.set(john, '...');

john = null // john은 위크맵과 메모리에서 삭제됩니다.

또한 위크맵은 반복작업, key(), values(), entries() 메서드를 지원하지 않습니다. 가비지 컬렉션에 의해서 제거되는 타이밍을 정확히 알 수가 없기 때문입니다.

메서드

  • weakMap.get(key)
  • weakMap.set(key, value);
  • weakMap.delete(key)
  • weakMap.has(key)

유스케이스

추가적인 데이터를 관리하고 싶을 때, 캐싱

Weak Set

위크셋도 마찬가지로 객체만 저장할 수 있다는 점에서 셋과의 차이점을 가지고 있습니다. 마찬가지로 keys(), values(), entries() 메서드, 반복작업을 할 수 없습니다.

상대적으로 위크맵보다 간단한 데이터를 저장합니다. 방문했는지 안했는지와 같은 것들이죠.

위크맵이나 위크셋이나 추가적인 자료를 저장하는데 사용됩니다. 객체가 메모리에서 삭제되면 그 와 관련된 추가적인 자료들을 메모리에서 자동으로 삭제하게끔 하는 것이죠.

profile
세계 최고 수준을 향해 달려가는 개발자입니다.

0개의 댓글