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 |