JavaScript - WeakSet


const s = new WeakSet() //참조 카운트를 증가시키지 않는다.

let o = {}; //객체는 만들어서 o라는 변수가 객체를 참조핟록 함. -> 참조카운트 1 됨
let o2 = o; //o2라는 변수도 o를 통해서 객체를 참조한다. -> 참조카운트가 2가 됨

o2 = null; //o2에 null이 들어가면서 객체의 참조카운트는 1이 된다.
o = null; //객체 참조 카운트가 0이 되어서 GC의 수거 대상이 된다.

s.add(o) //o라는 변수가 가리키는 객체를 s에 추가했는데, 참조카운트는 그래도 1이다. 참조하고 있다는 걸 객체에 알리지 않음
o = null; // 객체의 참조카운터가 0이 됨. -> GC. s에는 아무것도 없게 된다.

keys(), values(), entries(), size, forEach, for … of 이런거 못 씀

set과의 비교

set에 객체를 저장할 경우 set에도 해당 객체에 대한 참조가 연결되어, 여타의 참조가 없어지더라도 set에는 객체가 여전히 살아 있음. 한편 Wea,Set은 객체에 대한 차몾카운트를 올리지 않아, 여타의 참조가 없어질 경우 WeakSet 내의 객체는 G.C의 대상이 된다.

  1. 참조형 데이터만 요소로 삼을 수 있다.
  2. iterable이 아니다.

has, add, delete만 됨.