반응형
오늘은 WeakMap에 대해 알아보도록 하겠습니다. WeakMap은 키가 약하게 참조되는 Map이라고 생각하면 될 것 같습니다. 키는 반드시 Object 형태여야하고 값은 임의의 값이 가능합니다. 키가 Object 형태로 약하게 유지되면서 다른 강한 키 참조가 없는 경우에 모든 항목은 GC(Garbage Collector)에 의해 WeakMap에서 제거됩니다.
var wm1 = new WeakMap(),
wm2 = new WeakMap(),
wm3 = new WeakMap();
var o1 = {},
o2 = function(){},
o3 = window;
wm1.set(o1, 37);
wm1.set(o2, "azerty");
wm2.set(o1, o2); // 값은 무엇이든 될 수 있음, 객체 또는 함수 포함
wm2.set(o3, undefined);
wm2.set(wm1, wm2); // 키와 값은 어떤 객체든 될 수 있음. 심지어 WeakMap도!
console.log(wm1.get(o2)); // "azerty"
console.log(wm2.get(o2)); // undefined, wm2에 o2에 대한 키가 없기에
console.log(wm2.get(o3)); // undefined, 이게 설정값이기에
wm1.has(o2); // true
wm2.has(o2); // false
wm2.has(o3); // true (값 자체가 'undefined'이더라도)
wm3.set(o1, 37);
console.log(wm3.get(o1)); // 37
wm1.has(o1); // true
wm1.delete(o1);
wm1.has(o1); // false
위 예제는 WeakMap의 예제입니다. 객체, 함수 그리고 window까지 WeakMap의 키가 될 수 있습니다. 게다가 다른 WeakMap도 WaekMap의 키가 될 수 있습니다. 단, 원시데이터는 키가 될 수 없습니다. set API로 값을 키와 값을 세팅할 수 있고, has API를 이용해 키에 대응하는 값이 있는지 확인할 수 있습니다. get API를 이용하여 키에 대응하는 값을 가져올 수 있고, delete API를 이용에 요소를 삭제할 수 있습니다.
이렇게 set, get, has, delete 4개의 API만 제공합니다.
참고:
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
반응형
'JavaScript' 카테고리의 다른 글
div height 100% 높이 구하기 (0) | 2021.01.11 |
---|---|
[ES6 JavaScript] WeakSet (0) | 2020.10.15 |
[ES6 JavaScript] Set (0) | 2020.10.11 |
[ES 6 JavaScript] Map (0) | 2020.10.10 |
[ES6 JavaScript] Generator (0) | 2020.10.07 |