본문으로 바로가기

Weakmap, Weakset

category JavaScript/ES6 2020. 10. 25. 18:22

set은 중복이 없는 배열이라고 생각하면 쉽고

map은 객체와 비슷하지만 키에 모든 자료형을 쓸 수 있고 삽입 순서대로 저장되는 등 다른 점이 몇가지 있다

이 둘 앞에 Weak가 붙으면 객체만 저장하는 자료형이되는데 이때 Weakmap과 Weakset은 객체를 말그대로 약하게(weak) 참조한다

약하게 참조한다는게 무슨 뜻이냐면..

let test = {
    name: 'test1'
}
let map = new Map().set(test,0);

test = null;

console.log(john);
console.log(map);

test는 {name:test1}을 가르키고

이 test를 다시 map에 넣어 map {name:test1}에 연결했다

이 상태에서 test에 null을 주면 {name:test1}는 가비지 컬렉터의 수집 대상이 될까?

map이 {name:test1}를 참조하고 있기 때문에 가비지 컬렉터의 수집 대상이 되지 않고 제대로 출력되는 것을 볼 수가 있다

let test = {
    name: 'test1'
}
let map = new WeakMap().set(test,0);

test = null;

console.log(test);
console.log(map);

반면 WeakMap은?

test의 참조가 끊어지고 WeakMap이 참조하고 있음에도 불구하고 연결이 끊겨있다

WeakMap가지고만 설명을 했지만 WeakSet도 동일하게 객체만 저장할 수 있는 약한 참조를 가진 자료구조이다

'JavaScript > ES6' 카테고리의 다른 글

class  (0) 2020.11.03
arrow function  (0) 2020.10.26
Destructuring  (0) 2020.10.21
Array  (0) 2020.10.20
var, let, const  (0) 2020.10.07