Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015년 7월.
* Some parts of this feature may have varying levels of support.
Set 객체는 원시값이나 객체 참조 값 등 모든 유형의 고유 값을 저장할 때 사용할 수 있습니다.
Set 객체는 값의 컬렉션입니다. Set의 값은 한 번만 나타날 수 있으며, Set의 컬렉션에서는 고유한 값입니다. Set의 요소를 삽입 순서대로 순회할 수 있습니다. 삽입 순서는 각 요소가 add() 메서드에 의해 Set에 성공적으로 삽입된 순서(즉, add()가 호출될 때 이미 Set에 동일한 요소가 없는 경우)에 해당합니다.
명세서에서는 Set이 "평균적으로 컬렉션의 요소 수에 따라 선형 이하의 액세스 시간을 제공하는" 방식으로 구현되어야 한다고 요구하고 있습니다. 따라서 내부적으로 해시 테이블(O(1) 조회), 검색 트리(O(log(N)) 조회) 또는 복잡성이 O(N)보다 좋은 다른 데이터 구조로 표현할 수 있습니다.
값 동일성은 동일 값 제로 동등 알고리즘을 기반으로 합니다. (이전에는 0과 -0을 다른 값으로 취급하는 동일 값 동등를 사용했습니다. 브라우저 호환성을 확인하세요.) 즉, === 연산자의 의미에 따라 NaN은 NaN과 동일하게 간주되며(NaN !== NaN임에도 불구하고) 다른 모든 값은 동일하게 간주됩니다. 또한 객체 키의 경우 동일성은 객체의 식별성(참조)에 기반합니다. 즉, 객체는 값이 아니라 참조로 비교됩니다. 예시는 Set 객체 사용하기를 참고하세요.
has 메서드는 이전에 Set에 추가된 대부분의 요소를 시험하는 것보다 평균적으로 빠른 접근 방식을 사용하여 값이 Set에 있는지 여부를 확인합니다. 특히 배열의 length가 Set의 size와 같을 때 Array.prototype.includes 메서드보다 평균적으로 더 빠릅니다.
Set 객체는 수학 연산과 같이 집합을 구성할 수 있는 몇 가지 메서드를 제공합니다. 이러한 메서드는 다음과 같습니다.
| A.difference(B) | Set | A∖BA\setminus B | |
| A.intersection(B) | Set | A∩BA\cap B | |
| A.symmetricDifference(B) | Set | (A∖B)∪(B∖A)(A\setminus B)\cup(B\setminus A) | |
| A.union(B) | Set | A∪BA\cup B | |
| A.isDisjointFrom(B) | Boolean | A∩B=∅A\cap B = \empty | |
| A.isSubsetOf(B) | Boolean | A⊆BA\subseteq B | |
| A.isSupersetOf(B) | Boolean | A⊇BA\supseteq B |
이 메서드들은 일반화 가능성을 높이기 위해 Set 객체뿐만 아니라 유사 Set인 모든 객체를 허용합니다.
모든 Set 구성 메서드는 this가 실제 Set 인스턴스여야 하지만, 인자는 Set과 유사하면 됩니다. 유사 Set 객체는 다음을 제공하는 객체입니다.
예를 들어 Map 객체는 size, has(), keys()도 가지고 있기 때문에 Set의 메서드를 사용했을때 아래처럼 키 Set처럼 동작합니다.
참고 : 유사 Set 프로토콜은 요소를 생성하기 위해 [Symbol.iterator]() 대신 keys() 메서드를 호출합니다. 이는 맵의 경우 반복자는 entries를 생성하지만 has() 메서드는 keys를 취하기 때문에 맵을 유효한 유시 Set 객체로 만들기 위해서입니다.
배열은 has() 메서드나 size 속성이 없고 keys() 메서드가 요소 대신 인덱스를 생성하기 때문에 유사 Set이 아닙니다. WeakSet 객체 역시 keys() 메서드가 없기 때문에 유사 Set이 아닙니다.
브라우저 Set과 유사한 객체(또는 "유사 Set 객체")는 Set처럼 여러 가지 방식으로 동작하는 웹 API 인터페이스입니다.
Set과 마찬가지로 요소는 객체에 추가한 순서대로 순회할 수 있습니다. 유사 Set 객체와 Set에는 동일한 이름과 동작을 공유하는 속성와 메서드도 있습니다. 그러나 Set과 달리 각 항목에 대해 미리 정의된 특정 유형만 허용합니다.
허용되는 유형은 명세 IDL 정의에 설정되어 있습니다. 예를 들어 GPUSupportedFeatures는 키/값으로 문자열을 사용해야 하는 유사 Set 객체입니다. 이는 아래 사양 IDL에 정의되어 있습니다.
유사 Set 객체는 읽기 전용이거나 읽기-쓰기 가능합니다(위의 IDL에서 readonly 키워드 참조).
메서드와 속성은 항목의 유형에 대한 제한을 제외하고는 Set의 동등한 개체처럼 동일한 동작을 합니다.
아래는 읽기 전용인 유사 Set 브라우저 객체의 예입니다.
아래는 쓰기 가능한 유사 Set 브라우저 객체의 예입니다.
새로운 Set 객체를 생성합니다.
파생 객체를 생성하는 데 사용되는 생성자 함수입니다.
아래 속성은 Set.prototype에 정의되며 모든 Set 인스턴스에서 공유됩니다.
Set.prototype.constructor인스턴스 객체를 생성한 생성자 함수입니다. Set 인스턴스의 경우 초기 값은 Set 생성자입니다.
Set.prototype.sizeSet 객체에 있는 값의 수를 반환합니다.
Set.prototype[Symbol.toStringTag][Symbol.toStringTag] 속성의 초기 값은 문자열 "Set" 입니다. 이 속성은 Object.prototype.toString()에서 사용합니다.
Set 객체에 같은 값이 있지 않다면 해당 Set 객체에 특정 값을 가진 새로운 요소를 삽입합니다.
Set.prototype.clear()Set 객체에서 모든 요소를 제거합니다.
Set.prototype.delete()value에 연결된 요소를 제거하고 요소가 성공적으로 제거되었는지 여부를 나타내는 부울을 반환합니다. Set.prototype.has(value)는 이후 false를 반환합니다.
Set.prototype.difference()하나의 Set을 받아서 주어진 Set 없으나 이 인스턴스의 Set에는 있는 요소가 포함된 새로운 Set을 반환합니다.
Set.prototype.entries()Set 객체의 각 요소에 대해 삽입 순서대로 [value, value] 배열 을 포함하는 새 반복자 객체를 반환합니다. 이는 Map 객체와 유사하므로 각 항목의 키는 Set의 값과 동일합니다.
Set.prototype.forEach()Set 객체에 있는 각 값에 대해 삽입 순서대로 callbackFn을 한 번씩 호출합니다. thisArg 매개변수가 주어진다면, callbackFn을 호출할 때마다 이 매개변수가 this 값으로 사용됩니다.
Set.prototype.has()주어진 값을 가진 요소가 Set 객체 내 존재 여부를 나타내는 부울을 반환합니다.
Set.prototype.intersection()하나의 Set을 받아 이 Set과 주어진 Set의 요소를 모두 포함하는 새 Set을 반환합니다.
Set.prototype.isDisjointFrom()하나의 Set을 받아 주어진 Set과 이 Set 간의 공통 요소가 없는지를 가리키는 부울을 반환합니다.
Set.prototype.isSubsetOf()하나의 Set을 받아 이 Set의 모든 요소가 주어진 Set 안에 있는지 여부를 나타내는 부울을 반환합니다.
Set.prototype.isSupersetOf()하나의 Set을 받아 주어진 Set의 모든 요소가 이 Set 안에 있는지 여부를 나타내는 부울을 반환합니다.
Set.prototype.keys()Set.prototype.values()의 별칭입니다.
Set.prototype.symmetricDifference()하나의 Set을 받아 이 Set과 주어진 Set 모두에 속한 요소를 제외하고 주어진 Set 혹은 이 Set에만 있는 요소가 속해있는 새로운 Set을 반환합니다.
Set.prototype.union()하나의 Set을 받아 이 Set과 주어진 Set 모두 혹은 하나만 속해있는 요소가 들어있는 새로운 Set을 반환합니다.
Set.prototype.values()Set객체 내의 각 요소의 값을 삽입 순서대로 yield하는 새로운 반복자 객체를 리턴합니다.
[Symbol.iterator]()Set 객체 내의 각 요소를 삽입 순서대로 yield하는 새로운 반복자 객체를 반환합니다.
set의 요소를 삽입 순서대로 순회합니다.
| ECMAScript® 2027 Language Specification # sec-set-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025년 10월 8일 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.