# 09. WeakSet | Set과의 차이점

🤗 처음보는 WeakSet의 특징을 알아보자 !

# ✨ 참조를 가지고 있는 객체만 저장 가능

let arr = [1,2,3,4];
let ws = new WeakSet();

ws.add(arr);
console.log(ws);

ws.add(function(){});
console.log(ws);

ws.add(111); // 참조 X
console.log(ws);

# 🔎 console


[object WeakSet] { ... }
[object WeakSet] { ... }
"error"
"TypeError: Invalid value used in weak set
    at WeakSet.add (<anonymous>)
    at beyaxiyore.js:11:4
    at https://static.jsbin.com/js/prod/runner-4.1.8.min.js:1:13924
    at https://static.jsbin.com/js/prod/runner-4.1.8.min.js:1:10866"

# ✨ 굳이 WeakSet을 쓰는 이유는?

굳이 WeakSet을 사용하는 이유는 참조하는 객체가 null이 되거나 필요가 없어지면, WeakSet 또한 가비지 컬렉션 대상이 되기 때문이다 !

let arr = [1,2,3,4];
let arr2 = [5,6,7,8];
let obj = {arr,arr2};
let ws = new WeakSet();

ws.add(arr);
ws.add(arr2);
ws.add(obj);

console.log(ws);

# 🔎 console


 WeakSet {(4) [5,6,7,8], (4) [1,2,3,4], Object {arr: Array(4), arr2: Array(4)}}

이제 참조 객체에 null을 입력해주고, has로 확인해주면 정말 유효한지 확인할 수 있다.

let arr = [1,2,3,4];
let arr2 = [5,6,7,8];
let obj = {arr,arr2};
let ws = new WeakSet();

ws.add(arr);
ws.add(arr2);
ws.add(obj);

arr = null;

console.log(ws);
console.log(ws.has(arr), ws.has(arr2));

# 🔎 console


WeakSet {(4) [5,6,7,8], (4) [1,2,3,4], Object {arr: Array(4), arr2: Array(4)}}
false true // 실제로는 유효하지 않은 걸 확인할 수 있다.

TIP

  1. weakset 은 열거가 불가능 하다.
  2. Memory Leak 으로부터 자유롭다.

# Reference


https://www.inflearn.com/course/es6-강좌-자바스크립트/dashboard (opens new window)

https://jsbin.com/ (opens new window)

Last Updated: 3/8/2024, 5:46:31 AM