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 ๊ฐ์ฒด๋ set ์์ฑ์ ํจ์๋ก ์์ฑํ๋ฉฐ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋น Set ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
์ธ์๋ก๋ ์ดํฐ๋ฌ๋ธ๋ฅผ ๋ฐ์ ์ ์๋ค.
๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ ๊ฒฝ์ฐ
const set = new Set([1, 2, 3, 3, 4, 4, 5]);
๋ฌธ์์ด์ ์ธ์๋ก ๋ฐ์ ๊ฒฝ์ฐ
const set = new Set("Hello world");
์์ฑ๋ 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๊ฐ์ฒด๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด, ์์๊ฐ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ ์์๋ก ์ ์ฅํ ์ ์๋ค.
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" });
์ค๋ณต๋ ์์๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
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);
4-3. Set.has(value)
Set ๊ฐ์ฒด ๋ด์ ๊ฐ์ด ์กด์ฌํ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํ๋ค.
const set = new Set("Hello World");
set.has("H");
set.has(" ");
set.has("w");
4-4. Set.clear()
Set ๊ฐ์ฒด์ ๋ชจ๋ ์์๋ฅผ ์ผ๊ด์ญ์ ํ๋ค. ํญ์ undefined๋ฅผ ๋ฐํํ๋ค.
const set = new Set([1, 2, 3, 4]);
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;
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);
});
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)));
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)));
6-3. ํฉ์งํฉ
const setA = new Set([1, 2, 3, 4, 5]);
const setB = new Set([1, 4, 5, 6, 7]);
new Set([...setA, ...setB]);
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));
};
isSuperSet()ํจ์๋ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์์์งํฉ์ธ์ง ์๋ ค์ฃผ๋ ํจ์์ด๋ค. ํด๋น ๊ฐ์ด true๋ผ๋ฉด ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์์์งํฉ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ๋ถ๋ถ ์งํฉ์ด ๋๋ค.
7. Conclusion
์คํ๊ต, ๊ณ ๋ฑํ๊ต ๋ ๋ฐฐ์ ๋ ํฉ์งํฉ, ๊ต์งํฉ ๋ฑ๋ฑ์ ๋ค์ ๋ค๋ฃจ๊ฒ ๋๋ ์ ์ ํ๋ค. ๋ํ ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ด ๋๋ผ์ ๋ค. ์ง๊ธ๊น์ง ๋ค์ํ ์งํฉ์ ๋ค๋ฃฐ ๊ธฐํ๊ฐ ์์์ง๋ง ์ฝ๋ฉ ํ ์ดํธ๋ฅผ ๊ณต๋ถํ๋ค๋ณด๋ฉด ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ ๋ฏ ํ๋ค. ๋งต(Map)๊ณผ ์ (Set) ์๋ ์๋ ๊ทธ์ ์ด๋ ค์ด ๊ฐ๋ ์ด์๋๋ฐ ์ง๊ธ์ ์ด๋์ ๋ ์ต์ํด์ง ๋ฏ ํ๋ค.
์ฐธ๊ณ
๋งต๊ณผ ์ JavaScript - Set [JavaScript] 37. Set ๊ณผ Map Set-mdn Map ๊ณผ Set
๐ 2022-08-12
Last updated