Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 Set(세트)이란? 개념부터 사용법까지 총정리

Set(세트)이란 무엇인가?

세트(Set)는 특정 값들을 순서 없이, 중복 없이 저장할 수 있는 추상 자료형입니다. 이는 수학에서 말하는 유한 집합(finite set) 개념을 컴퓨터로 구현한 것이라고 볼 수 있습니다.

대부분의 다른 컬렉션 타입과 달리, 세트에서는 특정 요소를 꺼내오기보다는 주로 어떤 값이 집합에 속해 있는지(멤버십 검사)를 확인하는 방식으로 사용됩니다.

언제 Set을 사용해야 할까?

다음과 같은 상황에서 Set을 활용하면 좋습니다.

- 저장하는 요소의 순서가 중요하지 않고, 값의 중복을 허용하고 싶지 않을 때
- 주로 객체나 값의 포함 여부를 확인하는 용도로 컨테이너를 사용할 때
- 수학의 집합처럼 합집합(union), 교집합(intersection), 차집합(difference) 같은 연산을 수행해야 할 때

Set 객체의 특징

자바스크립트의 Set 객체는 원시값(primitive value)이든 객체 참조(object reference)든, 어떤 타입의 고유한 값이든 저장할 수 있습니다.

참고: Set에 저장되는 모든 값은 반드시 고유해야 하기 때문에, 값을 추가할 때마다 동등성(equality) 검사가 수행됩니다.

세트 생성 및 사용하기

let mySet = new Set();
mySet.add(1);
mySet.add(1);
mySet.add(1);
// 숫자 1은 한 번만 추가됨
console.log(mySet.size)

// 빈 객체 리터럴끼리는 동일하다고 간주되지 않음
mySet.add({});
mySet.add({});
console.log(mySet.size)

let a = {};
mySet.add(a);
mySet.add(a);
// 같은 객체 참조이므로 한 번만 추가됨
console.log(mySet.size)

실행 결과

1
3
4

객체 추가 시 주의할 점

위 예제에서 주목할 점은 빈 객체 리터럴 {}를 두 번 추가했음에도 두 값이 서로 다른 값으로 취급된다는 사실입니다. 그 이유는 객체 리터럴을 새로 작성할 때마다 서로 다른 메모리 공간을 참조하기 때문입니다. 참조하는 메모리 주소가 다르면 자바스크립트는 두 객체를 같은 값으로 보지 않습니다.

반면, 변수 a에 담긴 동일한 객체를 두 번 추가하면 한 번만 저장되어 최종 크기가 4가 되는 것을 확인할 수 있습니다. 즉, Set에서 객체의 중복 판단은 값 자체가 아니라 참조(reference)를 기준으로 이루어진다는 점을 기억해야 합니다.