본문 바로가기
javascript

[JS] Set 도대체 어떻게 사용하는 건데?

by 100kg_취준생 2025. 1. 24.
반응형

 

 

JavaScript에서 Set 객체는 고유한 값들의 집합을 저장할 수 있는 데이터 구조입니다. 이 글에서는 Set의 특징, 사용법, 그리고 실무에서 유용한 활용 예제까지 자세히 다룰 것입니다.


1. Set 객체란?

Set은 JavaScript에서 중복을 허용하지 않는 값들의 집합을 표현하는 데 사용됩니다. 기본 배열과는 다르게 동일한 값을 중복으로 추가할 수 없다는 점이 큰 특징입니다.

주요 특징:

  • 중복 불허: 동일한 값은 한 번만 저장됩니다.
  • 순서 보장: 삽입 순서를 유지합니다.
  • 값의 타입 제한 없음: 문자열, 숫자, 객체 등 모든 데이터 타입 저장 가능.
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // 중복 값 추가 시 무시됨
console.log(mySet); // Output: Set { 1, 2 }

2. Set의 주요 메서드

(1) add(value)

Set에 값을 추가합니다. 이미 존재하는 값은 추가되지 않습니다.

const set = new Set();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복 값 무시
console.log(set); // Output: Set { 'apple', 'banana' }

(2) delete(value)

특정 값을 삭제합니다. 값이 존재하면 삭제하고 true를 반환하며, 값이 없으면 false를 반환합니다.

set.delete("banana");
console.log(set); // Output: Set { 'apple' }

(3) has(value)

특정 값이 Set에 존재하는지 확인합니다.

console.log(set.has("apple")); // Output: true
console.log(set.has("orange")); // Output: false

(4) clear()

Set의 모든 값을 삭제합니다.

set.clear();
console.log(set); // Output: Set {}

(5) size

Set에 저장된 요소의 개수를 반환합니다.

console.log(set.size); // Output: 0

3. Set 순회 (Iteration)

Set은 반복 가능한(iterable) 객체입니다. 따라서 다양한 방법으로 순회할 수 있습니다.

(1) for...of

const set = new Set(["a", "b", "c"]);
for (const value of set) {
  console.log(value);
}
// Output: a, b, c

(2) forEach 메서드

set.forEach((value) => {
  console.log(value);
});
// Output: a, b, c

(3) Spread 문법

const arrayFromSet = [...set];
console.log(arrayFromSet); // Output: [ 'a', 'b', 'c' ]

4. Set의 실용적 활용 예제

(1) 배열의 중복 제거

const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); // Output: [ 1, 2, 3, 4, 5 ]

(2) 교집합 구현

const setA = new Set([1, 2, 3, 4]);
const setB = new Set([3, 4, 5, 6]);
const intersection = new Set([...setA].filter(x => setB.has(x)));
console.log(intersection); // Output: Set { 3, 4 }

(3) 차집합 구현

const difference = new Set([...setA].filter(x => !setB.has(x)));
console.log(difference); // Output: Set { 1, 2 }

5. SetWeakSet의 차이

WeakSetSet과 비슷하지만 몇 가지 차이점이 있습니다:

  • 객체만 저장 가능: WeakSet은 원시값을 저장할 수 없습니다.
  • 참조가 약함: 객체가 더 이상 참조되지 않으면 가비지 컬렉션 대상이 됩니다.
  • 반복 불가: WeakSetSet과 달리 순회가 불가능합니다.
const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
console.log(weakSet.has(obj)); // Output: true

결론

JavaScript의 Set 객체는 데이터의 중복을 제거하거나 집합 연산을 수행할 때 매우 유용합니다. 특히 대량의 데이터 처리나 데이터 구조를 다룰 때 큰 이점을 제공합니다. Set을 활용하여 더 효율적인 코드 작성을 도전해보세요!