This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

Set

Baseline Widely available *

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์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ) ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ’์€ ๋™์ผํ•˜๊ฒŒ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ

has ๋ฉ”์„œ๋“œ๋Š” ์ด์ „์— Set์— ์ถ”๊ฐ€๋œ ๋Œ€๋ถ€๋ถ„์˜ ์š”์†Œ๋ฅผ ์‹œํ—˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ‰๊ท ์ ์œผ๋กœ ๋น ๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์ด Set์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐฐ์—ด์˜ length๊ฐ€ Set์˜ size์™€ ๊ฐ™์„ ๋•Œ Array.prototype.includes ๋ฉ”์„œ๋“œ๋ณด๋‹ค ํ‰๊ท ์ ์œผ๋กœ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

Set ๊ตฌ์„ฑ

Set ๊ฐ์ฒด๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ๊ณผ ๊ฐ™์ด ์ง‘ํ•ฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ์œ ํ˜• ์ˆ˜ํ•™์  ๋™์น˜ ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ
A.difference(B) Set Aโˆ–BA\setminus B ๋‘ ๊ฐœ์˜ ์›์ด ๊ฒน์น˜๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. A์™€ B์˜ ์ฐจ์ง‘ํ•ฉ์€ A์—์„œ B์™€ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
A.intersection(B) Set AโˆฉBA\cap B ๋‘ ๊ฐœ์˜ ์›์ด ๊ฒน์น˜๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. A์™€ B์˜ ๊ต์ง‘ํ•ฉ์€ ๋‘ ์›์ด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
A.symmetricDifference(B) Set (Aโˆ–B)โˆช(Bโˆ–A)(A\setminus B)\cup(B\setminus A) ๋‘ ๊ฐœ์˜ ์›์ด ๊ฒน์น˜๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. A์™€ B์˜ ๋Œ€์นญ์ฐจ ์ง‘ํ•ฉ์€ ๋‘ ์› ์ค‘ ์–ด๋А ํ•œ ์›์ด ํฌํ•จํ•˜์ง€๋งŒ ๋‘˜ ๋‹ค ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.
A.union(B) Set AโˆชBA\cup B ๋‘ ๊ฐœ์˜ ์›์ด ๊ฒน์น˜๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. A์™€ B์˜ ๋Œ€์นญ ์ฐจ์ด๋Š” ๋‘ ์› ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ์›์ด ํฌํ•จํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.
A.isDisjointFrom(B) Boolean AโˆฉB=โˆ…A\cap B = \empty ๋‘ ๊ฐœ์˜ ์›์ด ์žˆ๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์›์ด ๊ฒน์น˜๋Š” ์˜์—ญ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— A์™€ B๋Š” ๋ถ„๋ฆฌ์†Œ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
A.isSubsetOf(B) Boolean AโІBA\subseteq B ๋‘ ๊ฐœ์˜ ์›์ด ์žˆ๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. A๋Š” B์— ์™„์ „ํžˆ ํฌํ•จ๋˜๋ฏ€๋กœ A๋Š” B์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
A.isSupersetOf(B) Boolean AโЇBA\supseteq B ๋‘ ๊ฐœ์˜ ์›์ด ์žˆ๋Š” ๋ฒค ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. B๊ฐ€ A์— ์™„์ „ํžˆ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— A๋Š” B์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋“ค์€ ์ผ๋ฐ˜ํ™” ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Set ๊ฐ์ฒด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์‚ฌ Set์ธ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ ์‚ฌ Set ๊ฐ์ฒด(Set-like objects)

๋ชจ๋“  Set ๊ตฌ์„ฑ ๋ฉ”์„œ๋“œ๋Š” this๊ฐ€ ์‹ค์ œ Set ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•˜์ง€๋งŒ, ์ธ์ž๋Š” Set๊ณผ ์œ ์‚ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์œ ์‚ฌ Set ๊ฐ์ฒด๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ์ˆซ์ž๊ฐ’์„ ๊ฐ€์ง„ size ์†์„ฑ
  • ์š”์†Œ๋ฅผ ์ทจํ•˜๊ณ  ๋ถ€์šธ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” has() ๋ฉ”์„œ๋“œ
  • Set์˜ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” keys() ๋ฉ”์„œ๋“œ

์˜ˆ๋ฅผ ๋“ค์–ด Map ๊ฐ์ฒด๋Š” size, has(), keys()๋„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Set์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ ํ‚ค Set์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

js
const a = new Set([1, 2, 3]);
const b = new Map([
  [1, "one"],
  [2, "two"],
  [4, "four"],
]);
console.log(a.union(b)); // Set(4) {1, 2, 3, 4}

์ฐธ๊ณ  : ์œ ์‚ฌ Set ํ”„๋กœํ† ์ฝœ์€ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด [@@iterator]() ๋Œ€์‹  keys() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งต์˜ ๊ฒฝ์šฐ ๋ฐ˜๋ณต์ž๋Š” entries๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ has() ๋ฉ”์„œ๋“œ๋Š” keys๋ฅผ ์ทจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งต์„ ์œ ํšจํ•œ ์œ ์‹œ Set ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ has() ๋ฉ”์„œ๋“œ๋‚˜ size ์†์„ฑ์ด ์—†๊ณ  keys() ๋ฉ”์„œ๋“œ๊ฐ€ ์š”์†Œ ๋Œ€์‹  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์‚ฌ Set์ด ์•„๋‹™๋‹ˆ๋‹ค. WeakSet ๊ฐ์ฒด ์—ญ์‹œ keys() ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ์‚ฌ Set์ด ์•„๋‹™๋‹ˆ๋‹ค.

์œ ์‚ฌ Set ๋ธŒ๋ผ์šฐ์ € API

๋ธŒ๋ผ์šฐ์ € Set๊ณผ ์œ ์‚ฌํ•œ ๊ฐ์ฒด(๋˜๋Š” "์œ ์‚ฌ Set ๊ฐ์ฒด")๋Š” Set์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์›น API ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

Set๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์š”์†Œ๋Š” ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌ Set ๊ฐ์ฒด์™€ Set์—๋Š” ๋™์ผํ•œ ์ด๋ฆ„๊ณผ ๋™์ž‘์„ ๊ณต์œ ํ•˜๋Š” ์†์„ฑ์™€ ๋ฉ”์„œ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Set๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ํŠน์ • ์œ ํ˜•๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ—ˆ์šฉ๋˜๋Š” ์œ ํ˜•์€ ๋ช…์„ธ IDL ์ •์˜์— ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GPUSupportedFeatures๋Š” ํ‚ค/๊ฐ’์œผ๋กœ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์œ ์‚ฌ Set ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋ž˜ ์‚ฌ์–‘ IDL์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

webidl
interface GPUSupportedFeatures {
  readonly setlike<DOMString>;
};

์œ ์‚ฌ Set ๊ฐ์ฒด๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ฑฐ๋‚˜ ์ฝ๊ธฐ-์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์œ„์˜ IDL์—์„œ readonly ํ‚ค์›Œ๋“œ ์ฐธ์กฐ).

  • ์ฝ๊ธฐ ์ „์šฉ Set ์œ ์‚ฌ ๊ฐ์ฒด์—๋Š” size ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ entries(), [forEach()](#set. prototype.foreach), has(), keys(), values(), @@iterator๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ Set ์œ ์‚ฌ ๊ฐ์ฒด์—๋Š” ์ถ”๊ฐ€์ ์œผ๋กœ clear(), delete(), add() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์€ ํ•ญ๋ชฉ์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์ œํ•œ์„ ์ œ์™ธํ•˜๊ณ ๋Š” Set์˜ ๋™๋“ฑํ•œ ๊ฐœ์ฒด์ฒ˜๋Ÿผ ๋™์ผํ•œ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์ฝ๊ธฐ ์ „์šฉ์ธ ์œ ์‚ฌ Set ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์œ ์‚ฌ Set ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž

Set()

์ƒˆ๋กœ์šด Set ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ •์  ์†์„ฑ

Set[@@species]

ํŒŒ์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์†์„ฑ

์•„๋ž˜ ์†์„ฑ์€ Set.prototype์— ์ •์˜๋˜๋ฉฐ ๋ชจ๋“  Set ์ธ์Šคํ„ด์Šค์—์„œ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

Set.prototype.constructor

์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. Set ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๊ฐ’์€ Set ์ƒ์„ฑ์ž์ž…๋‹ˆ๋‹ค.

Set.prototype.size

Set ๊ฐ์ฒด์— ์žˆ๋Š” ๊ฐ’์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Set.prototype[@@toStringTag]

@@toStringTag ์†์„ฑ์˜ ์ดˆ๊ธฐ ๊ฐ’์€ ๋ฌธ์ž์—ด "Set" ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ Object.prototype.toString()์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ

Set.prototype.add()

Inserts a new element with a specified value in to a Set object, if there isn't an element with the same value already in the Set.

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ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ˜๋ณต์ž ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

Set.prototype[@@iterator]()

Set ๊ฐ์ฒด ๋‚ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ yieldํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ˜๋ณต์ž ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

Set ๊ฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

js
const mySet1 = new Set();

mySet1.add(1); // Set(1) { 1 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add("some text"); // Set(3) { 1, 5, 'some text' }
const o = { a: 1, b: 2 };
mySet1.add(o);

mySet1.add({ a: 1, b: 2 }); // o ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค

mySet1.has(1); // true
mySet1.has(3); // false, 3 ์ด set์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
mySet1.has(5); // true
mySet1.has(Math.sqrt(25)); // true
mySet1.has("Some Text".toLowerCase()); // true
mySet1.has(o); // true

mySet1.size; // 5

mySet1.delete(5); // set์—์„œ 5 ์ œ๊ฑฐ
mySet1.has(5); // false, 5 ๋Š” ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

mySet1.size; // 4, ๋ง‰ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

mySet1.add(5); // Set(5) { 1, 'some text', {...}, {...}, 5 } - ์ด์ „์— ์‚ญ์ œ๋œ ์•„์ดํ…œ์ด ์ƒˆ๋กœ์šด ์•„์ดํ…œ์œผ๋กœ ์ถ”๊ฐ€๋˜๋‚˜, ์‚ญ์ œ ์ „ ์›๋ž˜ ์œ„์น˜๋ฅผ ์œ ์ง€ํ•˜์ง„ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

console.log(mySet1); // Set(5) { 1, "some text", {โ€ฆ}, {โ€ฆ}, 5 }

set ์ˆœํšŒํ•˜๊ธฐ

set์˜ ์š”์†Œ๋ฅผ ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.

js
for (const item of mySet1) {
  console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5

for (const item of mySet1.keys()) {
  console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5

for (const item of mySet1.values()) {
  console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5

// ํ‚ค์™€ ๊ฐ’์€ ์—ฌ๊ธฐ์„  ๊ฐ™์Šต๋‹ˆ๋‹ค.
for (const [key, value] of mySet1.entries()) {
  console.log(key);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5

// Array.from์„ ์‚ฌ์šฉํ•˜์—ฌ Set ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ
const myArr = Array.from(mySet1); // [1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}, 5]

// ์•„๋ž˜ ์ฝ”๋“œ๋Š” HTML ๋ฌธ์„œ์—์„œ ์ˆ˜ํ–‰๋  ๋•Œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
mySet1.add(document.body);
mySet1.has(document.querySelector("body")); // true

// Set๊ณผ ๋ฐฐ์—ด๊ฐ„์˜ ๋ณ€๊ฒฝ
const mySet2 = new Set([1, 2, 3, 4]);
console.log(mySet2.size); // 4
console.log([...mySet2]); // [1, 2, 3, 4]

// ๊ต์ง‘ํ•ฉ(intersection)์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));

// ์ฐจ์ง‘ํ•ฉ(difference)์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));

// Set์ด ๊ฐ€์ง„ ๊ฐœ์ฒด๋ฅผ forEach()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœํšŒ
mySet2.forEach((value) => {
  console.log(value);
});
// 1
// 2
// 3
// 4

๊ธฐ๋ณธ์ ์ธ Set ์—ฐ์‚ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

js
function isSuperset(set, subset) {
  for (const elem of subset) {
    if (!set.has(elem)) {
      return false;
    }
  }
  return true;
}

function union(setA, setB) {
  const _union = new Set(setA);
  for (const elem of setB) {
    _union.add(elem);
  }
  return _union;
}

function intersection(setA, setB) {
  const _intersection = new Set();
  for (const elem of setB) {
    if (setA.has(elem)) {
      _intersection.add(elem);
    }
  }
  return _intersection;
}

function symmetricDifference(setA, setB) {
  const _difference = new Set(setA);
  for (const elem of setB) {
    if (_difference.has(elem)) {
      _difference.delete(elem);
    } else {
      _difference.add(elem);
    }
  }
  return _difference;
}

function difference(setA, setB) {
  const _difference = new Set(setA);
  for (const elem of setB) {
    _difference.delete(elem);
  }
  return _difference;
}

// ์˜ˆ์ œ
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 3]);
const setC = new Set([3, 4, 5, 6]);

isSuperset(setA, setB); // true ๋ฐ˜ํ™˜
union(setA, setC); // Set {1, 2, 3, 4, 5, 6} ๋ฐ˜ํ™˜
intersection(setA, setC); // Set {3, 4} ๋ฐ˜ํ™˜
symmetricDifference(setA, setC); // Set {1, 2, 5, 6} ๋ฐ˜ํ™˜
difference(setA, setC); // Set {1, 2} ๋ฐ˜ํ™˜

๋ฐฐ์—ด๊ณผ์˜ ๊ด€๊ณ„

js
const myArray = ["value1", "value2", "value3"];

// Set ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ Set์œผ๋กœ ๋ณ€ํ˜•
const mySet = new Set(myArray);

mySet.has("value1"); // returns true

// ์ „๊ฐœ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ set์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ˜•
console.log([...mySet]); // Will show you exactly the same Array as myArray

๋ฐฐ์—ด์—์„œ ์ค‘๋ณต ์š”์†Œ ์ œ๊ฑฐํ•˜๊ธฐ

js
// ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
const numbers = [2, 13, 4, 4, 2, 13, 13, 4, 4, 5, 5, 6, 6, 7, 5, 32, 13, 4, 5];

console.log([...new Set(numbers)]); // [2, 13, 4, 5, 6, 7, 32]

๋ฌธ์ž์—ด๊ณผ์˜ ๊ด€๊ณ„

js
// ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ฌธ (set์€ "F"์™€ "f"๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ฒŒ ๋จ)
new Set("Firefox"); // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]

// ์ค‘๋ณต ๋ฌธ์ž์—ด์€ ์ƒ๋žต ("f"๋Š” ๋ฌธ์ž์—ด์—์„œ 2๋ฒˆ ๋‚˜ํƒ€๋‚˜๊ธฐ์—, set์€ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ฒŒ ๋จ)
new Set("firefox"); // Set(6) [ "f", "i", "r", "e", "o", "x" ]

Set๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’ ๋ชฉ๋ก์˜ ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

js
const array = Array.from(document.querySelectorAll("[id]")).map((e) => e.id);

const set = new Set(array);
console.assert(set.size === array.length);

๋ช…์„ธ์„œ

Specification
ECMAScriptยฎ 2026 Language Specification
# sec-set-objects

๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ

๊ฐ™์ด ๋ณด๊ธฐ