728x90
SET 이란
new Set()
을 통해 Set을 생성할 수 있습니다.
Set은 자바스크립트에 내장된 표준 객체(Standard Built-in Object) 이며, 중복된 값을 허용하지 않는 데이터 집합입니다.
그렇기 때문에, Set에 중복된 값을 넘기게 되면 Set은 알아서 중복된 값을 제외한 배열을 생성합니다.
let myset = new Set([1, 2, 3, 4, 1, 2, 1, 5, 6, 7, 7, 8]);
console.log(myset);
// Set(8) {1, 2, 3, 4, 5, 6, 7, 8}
SET의 장점
Set은 중복을 허락하지 않기 때문에, 이미 중복된 값이 존재하는지 체크하지 않아도 됩니다.
const myset = new Set([1, 2]);
console.log(myset.size); // 2
myset.add(1);
console.log(myset.size); // 2
myset.add(3);
console.log(myset.size); // 3
Set 메서드
Set의 메서드들은 다음과 같습니다.
WeakSet 이란
위에서 언급한 Set을 StrongSet이라 하고 지금부터 할 설명은 WeakSet에 대해서 입니다.
왜 이렇게 Set을 두 개로 나눴냐면, StrongSet은 객체에 대한 참조가 이루어 지지 않을 경우 가비지 콜렉션이 될 수 있기 때문입니다.
let foo = { name: "kim" };
let myset = new Set([foo]);
foo = null;
console.log(foo); // null
console.log([...myset][0]); // { name: "kim" }
foo 변수의 객체에 대한 참조는 사라졌지만 Set이 객체를 참조하고 있기 때문에 { name: "kim" }
는 사라지지 않습니다.
이런 경우를 방지하기 위해서 ES6에서는 WeakSet()
을 제공합니다.WeakSet()
은 객체형태를 중복없이 저장하려고 할 때 유용합니다.
WeakSet의 특징
객체가 아닌 값(원시값)을 add()
, has()
, delete()
메서드들의 인자로 넘기면 TypeError
가 발생합니다.
interable이 존재하지 않습니다.size
프로퍼티가 존재하지 않습니다.
'Programming > Javascript' 카테고리의 다른 글
ES6 Set과 Destructuring 을 이용한 로또 번호 생성기 (0) | 2020.04.11 |
---|---|
ES6 Map과 WeakMap (0) | 2020.04.11 |
ES6 디스트럭쳐링(Destructuring) (0) | 2020.04.10 |
ES6 String에 추가된 메서드들 (0) | 2020.04.09 |
Babel의 뜻과 사용법 (0) | 2020.04.07 |