Set

1. ๊ฐœ์š”

ES6์˜ Set๋Š” Map์™€ ๋น„์Šทํ•˜์ง€๋งŒ Set๋Š” Map์™€๋Š” ๋‹ค๋ฅด๊ฒŒ key๊ฐ’๋งŒ์ด ์กด์žฌํ•œ๋‹ค. ์•ž์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Set์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.


2. Set ๊ฐ์ฒด์˜ ํŠน์ง•

Set ๊ฐ์ฒด๋Š” ์ž๋ฃŒํ˜•์— ๊ด€๊ณ„ ์—†์ด ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ ๋ชจ๋‘ ์œ ์ผํ•œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€ ๋‚ด์žฅ ๊ฐ์ฒด์ด๋‹ค. ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ ์š”์†Œ๋ฅผ ์ˆœํšŒ(for...in, for...of๋ณด๋‹ค for๋ฌธ์„ ์„ ํ˜ธ)ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ Set๋‚ด ๊ฐ’์€ ํ•œ ๋ฒˆ๋งŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ๊ฐ’์€ ๊ทธ Set ์ฝœ๋ ‰์…˜ ๋‚ด์—์„œ ์œ ์ผํ•˜๋‹ค.

Set์˜ ํŠน์ง•์„ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋™์ผํ•œ ๊ฐ’์„ ์ค‘๋ณตํ•˜์—ฌ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค.

  • ์š”์†Œ ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

  • ์ธ๋ฑ์Šค๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

์ด๋Ÿฌํ•œ Set์€ ์ˆ˜ํ•™์  ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ทธ๋ž˜์„œ Set๋ฅผ ํ†ตํ•ด ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ์—ฌ์ง‘ํ•ฉ ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


3. Set ๊ฐ์ฒด์˜ ์ƒ์„ฑ

const set = new Set();
set_object_create

๊ธฐ๋ณธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๊ฐ™๋‹ค. Set ๊ฐ์ฒด๋Š” set ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•˜๋ฉฐ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋นˆ Set ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์ธ์ˆ˜๋กœ๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐฐ์—ด์„ ์ธ์ˆ˜๋กœ ๋ฐ›์€ ๊ฒฝ์šฐ

    const set = new Set([1, 2, 3, 3, 4, 4, 5]);

    set_object_create2

  • ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ๋ฐ›์€ ๊ฒฝ์šฐ

    const set = new Set("Hello world");

    set_object_create3

์ƒ์„ฑ๋œ Set ๊ฐ์ฒด๋ฅผ ๋ณด๋ฉด ์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ Set ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ๋ฐ ๋ฌธ์ž์—ด ๋“ฑ์—์„œ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

const arr = [...new Set([1, 2, 3, 3, 4, 4, 5])];
๋ฐฐ์—ด์˜ ์ค‘๋ณต๋œ ์š”์†Œ ์ œ๊ฑฐ

4. Set์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ

4-1. Set.add(value)

๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ  Set ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ๋™์ผํ•œ ๊ฐ’์„ ๋„ฃ๊ณ  set.add(value)๋ฅผ ์•„๋ฌด๋ฆฌ ๋งŽ์ด ํ˜ธ์ถœํ•œ๋‹คํ•ด๋„ Set ๊ฐ์ฒด์—๋Š” ์ถ”๊ฐ€๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. Set.add()๋ฉ”์„œ๋“œ๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒด์ด๋‹์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

const set = new Set();
set.add(1).add(2).add(2).add(3).add(4).add(4);
set_add1

Set๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด, ์›์‹œ๊ฐ’ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ’์„ ์š”์†Œ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

const js = { name: "js" };
const react = { name: "react" };
const next = { name: "next" };

const set = new Set();
set.add(js).add(react).add(next).add(react).add(next).add({ name: "html" });
set_add2

์ค‘๋ณต๋œ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


4-2. Set.delete(value)

๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค. ํ˜ธ์ถœ ์‹œ์ ์— Set ๋‚ด์— ๊ฐ’์ด ์žˆ์–ด์„œ ์ œ๊ฑฐ์— ์„ฑ๊ณตํ•˜๋ฉด true, ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋•Œ Set ๊ฐ์ฒด์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•˜๋ ค๋Š” ์š”์†Œ๊ฐ’์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Set.delete()๋ฉ”์„œ๋“œ๋Š” ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒด์ด๋‹์„ ํ•  ์ˆ˜ ์—†๋‹ค.

const js = { name: "js" };
const react = { name: "react" };
const next = { name: "next" };

const set = new Set();
set.add(1).add(2).add(3).add(4).add(js).add(react).add(next);

set.delete(js);
set.delete(3);
set_delete

4-3. Set.has(value)

Set ๊ฐ์ฒด ๋‚ด์— ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด true, ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const set = new Set("Hello World");

set.has("H");
set.has(" ");
set.has("w");
set_has

4-4. Set.clear()

Set ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ผ๊ด„์‚ญ์ œํ•œ๋‹ค. ํ•ญ์ƒ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const set = new Set([1, 2, 3, 4]);
set.clear();
set_clear

4-5. Set.size

Set ๊ฐ์ฒด์— ๋ช‡ ๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. Set.size ํ”„๋กœํผํ‹ฐ์— ์ˆซ์ž๋ฅผ ํ• ๋‹นํ•˜์—ฌ Set ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•  ์ˆ˜ ์—†๋‹ค. ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๋Š” setterํ•จ์ˆ˜๋Š” ์—†๊ณ  getterํ•จ์ˆ˜๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

const arraySet = new Set([1, 2, 3, 4]);
const stringSet = new Set("Hello World");

arraySet.size;
stringSet.size;
set_size

5. Set ๊ฐ์ฒด ์š”์†Œ์˜ ์ˆœํšŒ

Set ๊ฐ์ฒด ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Set.forEach๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜ํ•œ for๋ฌธ, for...or๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Set ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ ˆ๋“œ๋ฌธ๋ฒ•๊ณผ, ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

Set.forEach์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ ์š”์†Œ๊ฐ’์ด๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋Š” Set ๊ฐ์ฒด์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Array.forEach๋ฉ”์„œ๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ต์ผํ•˜๊ธฐ ์œ„ํ•จ๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ๋Š” ํ˜„์žฌ ์ˆœํšŒ์ค‘์ธ Set ๊ฐ์ฒด ์ž์ฒด์ด๋‹ค.

const set = new Set([1, 2, 3, 4]);
set.forEach((v, _, set) => {
  console.log(v, set);
});
set_forEach

6. Set ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ์ง‘ํ•ฉ ์—ฐ์‚ฐ

Set ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ๋ถ€๋ถ„ ์ง‘ํ•ฉ๊ณผ ์ƒ์œ„ ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


6-1. ๊ต์ง‘ํ•ฉ

const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([1, 4, 5, 6, 7]);

new Set([...setA].filter((a) => setB.has(a)));
set_intersection(๊ต์ง‘ํ•ฉ)

6-2. ์ฐจ์ง‘ํ•ฉ

const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([1, 4, 5, 6, 7]);

new Set([...setA].filter((a) => !setB.has(a)));
new Set([...setB].filter((b) => !setA.has(b)));
set_relative(์ฐจ์ง‘ํ•ฉ)

6-3. ํ•ฉ์ง‘ํ•ฉ

const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([1, 4, 5, 6, 7]);

new Set([...setA, ...setB]);
set_union(ํ•ฉ์ง‘ํ•ฉ)

6-4. ๋ถ€๋ถ„ ์ง‘ํ•ฉ๊ณผ ์ƒ์œ„ ์ง‘ํ•ฉ

const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([1, 2, 3]);

const isSuperSet = (setA, setB) => {
  return [...setB].every((b) => setA.has(b));
};
set_isSuperSet

isSuperSet()ํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ƒ์œ„์ง‘ํ•ฉ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•ด๋‹น ๊ฐ’์ด true๋ผ๋ฉด ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ƒ์œ„์ง‘ํ•ฉ ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด ๋œ๋‹ค.


7. Conclusion

์ค‘ํ•™๊ต, ๊ณ ๋“ฑํ•™๊ต ๋•Œ ๋ฐฐ์› ๋˜ ํ•ฉ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ ๋“ฑ๋“ฑ์„ ๋‹ค์‹œ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋‹ˆ ์‹ ์„ ํ–ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋†€๋ผ์› ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃฐ ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์ง€๋งŒ ์ฝ”๋”ฉ ํ…Œ์ดํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๋“ฏ ํ•˜๋‹ค. ๋งต(Map)๊ณผ ์…‹(Set) ์˜›๋‚ ์—๋Š” ๊ทธ์ € ์–ด๋ ค์šด ๊ฐœ๋…์ด์—ˆ๋Š”๋ฐ ์ง€๊ธˆ์€ ์–ด๋А์ •๋„ ์ต์ˆ™ํ•ด์ง„ ๋“ฏ ํ•˜๋‹ค.


์ฐธ๊ณ 

๋งต๊ณผ ์…‹ JavaScript - Set [JavaScript] 37. Set ๊ณผ Map Set-mdn Map ๊ณผ Set


๐Ÿ“… 2022-08-12

Last updated