2023. 8. 1. 18:12ใ2. JS๋ฌธ๋ฒ ์ข ํฉ
Map๊ณผ, Set
JavaScript์์ ๊ฐ์ฒด(object)์ ๋ฐฐ์ด(array)์ ์ด์ฉํ๋ฉด ๋ค์ํ๊ณ ๋ณต์กํ ํ๋ก๊ทธ๋๋ฐ์ ํ ์๊ฐ ์๋ค. ๊ทธ๋ผ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๋ค์ ‘ํ๋ก๊ทธ๋๋ฐ’์ ์ผ๋ก ๋ฐ์ํ๊ธฐ์ ๋ง์ด ๋ถ์กฑํ๋ค. Map๊ณผ Set์, ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋น๊ต์ ์ต๊ทผ์ ๋ฑ์ฅํ ์๋ฃ ๊ตฌ์กฐ๋ก, ์ด ๋ ์๋ฃ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ์ ๊ตฌ์ฑ, ๊ฒ์ ๋ฐ ์ฌ์ฉ์ ๊ฐ์ฒด๋ ๋ฐฐ์ด๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์ด ๊ฐ๊ด๋ฐ๊ณ ์๋ค.
- MAP
Map์ ํค-๊ฐ ์์ ์ ์ฅํ๋ ๊ฐ์ฒด์ ๋น์ทํ๋ค. Map์ ๊ฐ ์์ ํค์ ๊ฐ์ ์ ์ฅํ๋ฉฐ, ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ํค๋ก ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์ ํ์ ์ฌ์ฉํ ์ ์๋ค. Map์ ํค๊ฐ ์ ๋ ฌ๋ ์์๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ์ถ๊ฐํ ์์๋๋ก ๋ฐ๋ณตํ ํ์๊ฐ ์๋ค.

[ Map์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ ์์ํ ํ ์ ์๋ค. ]
ํค-๊ฐ ์ ์ถ๊ฐ ๋ฐ ๊ฒ์(set)
ํค-๊ฐ ์ ์ญ์ (delete)
๋ชจ๋ ํค-๊ฐ ์ ์ ๊ฑฐ(clear)
Map ํฌ๊ธฐ ๋ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ(size)
[Map์๋ ์๋์ ๊ฐ์ ์ฃผ์ ๋ฉ์๋์ ํ๋กํผํฐ๊ฐ ์๋ค]
new Map() – ๋งต์ ๋ง๋ญ๋๋ค.
map.set(key, value) – key๋ฅผ ์ด์ฉํด value๋ฅผ ์ ์ฅํฉ๋๋ค.
map.get(key) – key์ ํด๋นํ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. key๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด undefined๋ฅผ ๋ฐํํฉ๋๋ค.
map.has(key) – key๊ฐ ์กด์ฌํ๋ฉด true, ์กด์ฌํ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
map.delete(key) – key์ ํด๋นํ๋ ๊ฐ์ ์ญ์ ํฉ๋๋ค.
map.clear() – ๋งต ์์ ๋ชจ๋ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
map.size – ์์์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
- Map์ ์์ฑ ๋ฐ ์ฌ์ฉ
์๋ก์ด Map์ ๋ง๋ค๋ ค๋ฉด Map() ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ค.
const myMap = new Map();
Map์ ๊ฐ์ ์ถ๊ฐํ๋ ค๋ฉด set() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
myMap.set('key', 'value');
Map์์ ๊ฐ์ ๊ฒ์ํ๋ ค๋ฉด get() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ( * set๊ณผ, map์ ํญ์ ํ์ด๋ค! )
console.log(myMap.get('key')); // 'value' ์ถ๋ ฅ
- Map์ ๋ฐ๋ณต
Map์์๋ keys(), values(), entries() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํค, ๊ฐ ๋ฐ ํค-๊ฐ ์์ ๋ฐ๋ณตํ ์ ์๋ค.
1) for …of ๋ฐ๋ณต๋ฌธ
for of ๋ฐ๋ณต๋ฌธ์ ES6์ ์ถ๊ฐ๋ ์๋ก์ด ์ปฌ๋ ์ ์ ์ฉ ๋ฐ๋ณต ๊ตฌ๋ฌธ. for of ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ปฌ๋ ์ ๊ฐ์ฒด๊ฐ [Symbol.iterator] ์์ฑ์ ๊ฐ์ง๊ณ ์์ด์ผ๋ง ํ๋ค. (์ง์ ๋ช ์ ๊ฐ๋ฅ)
(iterator = ๋ฐ๋ณต์) ์์ ํ๋ํ๋๋ฅผ ๋ฐ๋ณตํ ์ ์๋๋ก ๋ฐฐ์ด ๋๋ ๊ฐ์ฒด์ ๋น์ทํ ํํ๋ก ์ด๊ฑฐ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ๋ก ์ดํดํ๋ฉด ๋๋ค.
var iterable = [10, 20, 30];
for (var valueof iterable) {
console.log(value);// 10, 20, 30
}
const myMap = new Map();
myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);
for (const key of myMap.keys()) {
console.log(key);
}
for (const value of myMap.values()) {
console.log(value);
}
for (const entry of myMap.entries()) {
console.log(`${entry[0]}: ${entry[1]}`);
}
์์ ์ฝ๋์์ myMap.keys()์ผ๋ก ์ธ ์ ์๋ ์ด์ ๋ myMap.key()๊ฐ ๋ฐํํ๋ ๊ฐ์ด iterator์ด๊ธฐ ๋๋ฌธ์ด๋ค.



- Map์ ํฌ๊ธฐ ๋ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ
Map์ ํฌ๊ธฐ๋ฅผ ํ์ธํ๋ ค๋ฉด size ์์ฑ์ ์ฌ์ฉํ๋ค.
console.log(myMap.size); // 3 ์ถ๋ ฅ
ํน์ ํค๊ฐ Map์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด has() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
console.log(myMap.has('two')); // true ์ถ๋ ฅ

์ผ์ชฝ์์ ๋ณด์ด๋ ์์์ ๊ฐ์ด,
myMap์ ์ฌ์ด์ฆ(๊ธธ์ด)๋ 3์ค์ด๋ฏ๋ก 3์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๋ฉฐ, two๋ myMap key์ ์กด์ฌํจ์ผ๋ก true๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ๋ํ๋๋ค.
