JavaScript

[Javascript] Set()과 WeakSet()의 차이

fnow 2021. 10. 25. 13:44
반응형

자바스크립트에서 객체란, 숫자, 문자열, 불 값, null, undefined를 제외한 모든 값이다. 객체는 실제 값이 아닌 참조하는 값으로 처리된다. 따라서 객체는 참조를 가지고 있다고 말할 수 있다.

 

 

 

 

 

 

1.  Set()

Set() 메서드는 주로 배열의 중복 값을 제거하기 위해 사용된다. 예약어 new와 같이 작성한다.

 

1
2
3
4
5
6
7
8
9
const array = [1231];
const set = new Set(array);
 
console.log(set); // {1, 2, 3}
console.log(toString.call(set)); // [object Set]
 
const newArray = [...set]; // 스프레드 문법 사용하여 객체로 변형하기
console.log(newArray); // [1, 2, 3]
console.log(toString.call(newArray)); // [object Array]
cs

 

 

 

 

 

 

2. WeakSet()

우선, WeakSet()은 Set()과 사용하는 방식은 동일하다.

 

1
2
3
4
const array = [12345];
const weakArray = new WeakSet();
 
weakArray.add(array); // [1, 2, 3, 4, 5]
cs

 

다른 점이 있다면, 참조를 가지고 있는 객체만 저장이 가능하다. 위에서 설명했듯이 기본 타입(숫자, 문자열, 불 값, null, undefined)을 제외한 모든 값이 객체이며 객체는 참조를 가진다.

weakArray에 WeakSet을 적용하면, 객체가 아닌 값은 담을 수 없고 에러가 뜬다.

 

1
2
3
4
5
6
7
8
9
const weakArray = new WeakSet();
 
weakArray.add([123]); // [1, 2, 3]
weakArray.add(function() {}); // function(){}
weakArray.add({name"Kim", age: 33}); // {name: "Kim", age: 33}
 
weakArray.add(12345); // Uncaught TypeError: Invalid value used in weak set
weakArray.add(null); // Uncaught TypeError: Invalid value used in weak set
weakArray.add("가나다"); // Uncaught TypeError: Invalid value used in weak set
cs

 

 

 

 

 

 

 

 

반응형