yongfront 2024. 2. 21. 12:45
반응형
SMALL

JavaScript의 Set 객체는 중복을 허용하지 않는 값을 저장하기 위한 컬렉션입니다. **Set**을 사용하면 어떤 값이든, 원시 값이든 객체 참조이든 상관없이 유일한 값들의 집합을 생성할 수 있습니다. 이는 배열과 유사하지만, 주요 차이점은 Set 내의 모든 값이 유니크해야 한다는 것입니다.

Set의 기본적인 사용법

let mySet = new Set();

// 값 추가
mySet.add(1);
mySet.add(5);
mySet.add("some text");
let o = {a: 1, b: 2};
mySet.add(o);

// Set: {1, 5, "some text", Object {a: 1, b: 2}}

// 중복 값 추가 시도 (추가되지 않음)
mySet.add(1); // Set에는 이미 1이 존재하기 때문에 무시됩니다.

// Set의 크기 확인
console.log(mySet.size); // 4

// 존재하는지 확인
console.log(mySet.has(1)); // true
console.log(mySet.has(3)); // false

// 값 제거
mySet.delete(5);

// 전체 삭제
mySet.clear();

Set의 반복

**Set**은 forEach 메서드와 이터러블 프로토콜을 모두 지원하기 때문에, 여러 방법으로 반복할 수 있습니다.

let mySet = new Set([1, 2, 3, 4]);

// forEach를 사용한 반복
mySet.forEach(function(value) {
  console.log(value);
});

// for...of를 사용한 반복
for (let item of mySet) {
  console.log(item);
}

// 이터레이터 직접 사용
let iterator = mySet.values();
console.log(iterator.next().value); // 1

Set의 용도와 장점

  1. 유니크한 값 관리: **Set**은 중복 없이 값을 관리해야 할 때 유용합니다. 예를 들어, 배열에서 중복 값을 제거하고자 할 때 **Set**을 사용할 수 있습니다.
  2. 데이터의 존재 여부 판단: has 메서드를 사용하여 어떤 값이 Set 내에 존재하는지 쉽게 확인할 수 있습니다. 이는 배열에 비해 효율적으로 데이터 존재 여부를 확인할 수 있습니다.
  3. 성능: 큰 데이터 집합에서의 추가, 삭제, 존재 확인 작업은 **Set**이 배열보다 일반적으로 더 빠릅니다.

주의 사항

  • Set 내부에서는 객체의 유일성이 '얕은(shallow)' 비교에 의해 결정됩니다. 따라서, 두 객체가 내용적으로 동일하더라도, 두 객체가 서로 다른 참조를 가지고 있다면, 두 객체는 Set 내에서 서로 다른 것으로 취급됩니다.
  • **Set**은 인덱스로 요소에 접근할 수 없습니다. 즉, **mySet[0]**과 같은 방식으로 **Set**의 첫 번째 요소에 접근하려고 해도 작동하지 않습니다. 대신 **Set.prototype.values()**와 같은 메서드를 사용하여 이터레이터를 통해 요소에 접근할 수 있습니다.

집합의 표현

Set 객체를 사용하여 집합을 표현합니다. 예를 들어, 두 개의 집합 A와 B를 다음과 같이 정의할 수 있습니다.

let A = new Set([1, 2, 3, 4]);
let B = new Set([3, 4, 5, 6]);

합집합 (Union)

두 집합 A와 B의 합집합은 A와 B에 속하는 모든 유니크한 요소를 포함하는 집합입니다.

let union = new Set([...A, ...B]);
console.log(union); // Set {1, 2, 3, 4, 5, 6}

교집합 (Intersection)

두 집합 A와 B의 교집합은 A와 B에 공통으로 속하는 요소들로 구성됩니다.

let intersection = new Set([...A].filter(x => B.has(x)));
console.log(intersection); // Set {3, 4}

차집합 (Difference)

집합 A에서 집합 B를 뺀 차집합은 A에 속하면서 B에는 속하지 않는 요소들로 구성됩니다.

let difference = new Set([...A].filter(x => !B.has(x)));
console.log(difference); // Set {1, 2}

부분 집합 (Subset)

집합 A가 집합 B의 부분 집합인지 확인하려면, A의 모든 요소가 B에 속하는지 확인합니다.

let isSubset = [...A].every(x => B.has(x));
console.log(isSubset); // false, A는 B의 부분 집합이 아닙니다.

집합 연산은 데이터 처리, 알고리즘 문제 해결, 컬렉션 관리 등 다양한 분야에서 유용하게 사용됩니다. Set 객체를 활용하면 이러한 집합 연산을 간단하고 효과적으로 수행할 수 있습니다.

728x90
반응형
LIST