JavaScript

[ES6 JavaScript] WeakMap

코딩하는 Jay 2020. 10. 13. 07:11
반응형

 오늘은 WeakMap에 대해 알아보도록 하겠습니다. WeakMap은 키가 약하게 참조되는 Map이라고 생각하면 될 것 같습니다. 키는 반드시 Object 형태여야하고 값은 임의의 값이 가능합니다. 키가 Object 형태로 약하게 유지되면서 다른 강한 키 참조가 없는 경우에 모든 항목은 GC(Garbage Collector)에 의해 WeakMap에서 제거됩니다.

 

Pixabay로부터 입수된 William Iven님의 이미지 입니다.  

 

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

 

WeakMap

WeakMap 객체는 키가 약하게 참조되는 키/값 쌍의 컬렉션입니다. 키는 객체여야만 하나 값은 임의 값이 될 수 있습니다.

developer.mozilla.org

 

반응형

'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