2025. 8. 26. 19:54ใFront-end/JavaScript

๋ชฉ์ฐจ
1. ๋งต๊ณผ ์
์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
2. ๋งต (map)
2-1. ์ฃผ์ ๋ฉ์๋/ํ๋กํผํฐ
2-2. map์ ๋์ ํน์ง
2-3. ๋งต์ ์์์ ๋ฐ๋ณต ์์ ํ๋ ๋ฉ์๋ : keys(), values(), entries()
2-4. ๊ฐ์ฒด ↔ ๋งต : Object.entries, Object.fromEntries
3. ์ (set)
3-1. ์ฃผ์ ๋ฉ์๋
3-2. ์ ์ ์์์ ๋ฐ๋ณต ์์ ํ๋ ๋ฉ์๋ : keys(), values(), entries()
1. ๋งต๊ณผ ์ ์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
์ง๊ธ๊น์ง ์๋ฃ๊ตฌ์กฐ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๋ณด์๋ค.
ํ์ง๋ง ํ์ค ์ธ๊ณ๋ฅผ ๋ฐ์ํ๊ธฐ์ ๊ฐ์ฒด์ ๋ฐฐ์ด๋ก ๋ถ์กฑํด์ map๊ณผ set์ด ๋ฑ์ฅํ๋ค.
๊ฐ๋จํ๊ฒ ์ฐจ์ด์ ์ ๋ณด์.
- ๊ฐ์ฒด : ํค(key)๊ฐ ์๋ ์ปฌ๋ ์ ์ ์ ์ฅ
- ๋ฐฐ์ด : ์์๊ฐ ์๋ ์ปฌ๋ ์ ์ ์ ์ฅ
- ๋งต(map) : ํค(๋ค์ํ ์๋ฃํ ํ์ฉ)๋ฅผ ๊ฐ์ง ์ปฌ๋ ์ ์ ์ ์ฅ
- ์ (set) : ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์ปฌ๋ ์ ์ ์ ์ฅ (ํค ์์)
2. ๋งต (map)
ํค(key)๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ์ ์์ ๊ฐ์ฒด์ ์ ์ฌํ๋, ํค์ ๋ค์ํ ์๋ฃํ์ ํ์ฉํ๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
1. ์ฃผ์ ๋ฉ์๋/ํ๋กํผํฐ โ
| ๋ฉ์๋/ํ๋กํผํฐ | ์ญํ |
| new Map() | ๋งต์ ์์ฑ |
| map.set(key, value) | key๋ก value๋ฅผ ์ ์ฅ |
| map.get(key) | key์ ํด๋นํ๋ ๊ฐ์ ๋ฐํ (์กด์ฌํ์ง ์๋ ํค๋ undefined ๋ฐํ) |
| map.has(key) | key๊ฐ ์กด์ฌํ๋ฉด true, ์กด์ฌํ์ง ์์ผ๋ฉด false ๋ฐํ |
| map.delete(key) | key์ ํด๋นํ๋ ๊ฐ์ ์ญ์ |
| map.clear() | ๋งต ์์ ๋ชจ๋ ์์๋ฅผ ์ ๊ฑฐ |
| map.size() | ์์์ ๊ฐ์๋ฅผ ๋ฐํ |
let john = { name: "John" };
let map = new Map();
map.set('1', 'str1'); // ๋ฌธ์ํ ํค
map.set(1, num); // ์ซ์ํ ํค
map.set(true, 'bool1'); // ๋ถ๋ฆฐํ ํค
map.set(john, 123); // ๊ฐ์ฒดํ ํค
console.log(map.get(1)); // 'num1'
console.log(map.get('1')); // 'str1'
console.log(map.get(john)); // 123
console.log(map.size); // 3
์ฌ๋ฌ ๊ฐ์ง ์๋ฃํ์ ํค๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์
๊ฐ์ฒด์ ๋ค๋ฅด๊ฒ ํค์ ํ์ ์ ๋ฌธ์ํ์ผ๋ก ๋ณํ์ํค์ง ์๊ณ ๊ทธ๋๋ก ์ ์งํ๋ค.
๊ฐ์ฒด๋ฅผ ํค๋ก ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ๋ ๋งต์ ์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋์ด๋ค.
๊ฐ์ฒด์์๋ ๊ฐ์ฒด ํค๋ฅผ ์ฌ์ฉํ ์ ์์๋ค.
let john = { name: "John" };
let obj = {};
obj[john] = 123;
console.log(obj["[object Object]"] ); // 123
// ์ํ๋ ๊ฐ 123์ ์ป๊ธฐ ์ํด์๋ ํค๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ object Object๋ฅผ ์์ฑํด์ผ ํจ
๊ฐ์ฒด์์ ๊ฐ์ฒด๋ฅผ ํค๋ก ์ฌ์ฉํ๋ฉด ๋ชจ๋ ํค๋ฅผ ๋ฌธ์ํ์ผ๋ก ๋ณํ์ํค๊ธฐ ๋๋ฌธ์ john์ด ๋ฌธ์ํ "[object Object]"๋ก ๋ณํ๋๋ค.
2. map์ ๋์ ํน์ง โ
1) ํค ๋น๊ต ๋ฐฉ์
๋งต์ SameValueZero๋ผ๋ ๋ด์ฅ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๊ฐ์ ๋ฑ๊ฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
SameValueZero๋ ์ผ์น ์ฐ์ฐ์( === )์ ๊ฑฐ์ ์ ์ฌํ๋, NaN๊ณผ NaN์ ์ผ์นํ๋ค๊ณ ์ทจ๊ธํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋งต์์๋ NaN๋ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
2) ์ฒด์ด๋
map.set์ ํธ์ถํ ๋๋ง๋ค ๋งต ์์ ์ด ๋ฐํ๋๋ค.
์ด๋ฅผ ์ด์ฉํด map.set์ ์ฒด์ด๋(chaining)ํ ์ ์๋ค.
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
3) ์ฝ์ ์์์ ๊ธฐ์ต
๋งต์ ๊ฐ์ด ์ฝ์ ๋ ์์๋ฅผ ๊ธฐ์ตํ๋ค. (์ํ์ ์ฌ์ฉ)
๊ฐ์ฒด๋ ํ๋กํผํฐ ์์๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ ๊ฒ๊ณผ ์ฐจ์ด๊ฐ ์๋ค.
3. ๋งต์ ์์์ ๋ฐ๋ณต ์์ ํ๋ ๋ฉ์๋ : keys(), values(), entries() โ
์๋ 3๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋งต์ ๊ฐ ์์์ ๋ฐ๋ณต ์์ ์ ํ ์ ์๋ค.
| ๋ฉ์๋ | ๋์ |
| map.keys() | ๊ฐ ์์์ ํค๋ฅผ ๋ชจ์ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
| map.values() | ๊ฐ ์์์ ๊ฐ์ ๋ชจ์ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
| map.entries() | ์์์ [ํค, ๊ฐ]์ ํ ์์ผ๋ก ํ๋ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
+ ์ถ๊ฐ๋ก ๋ด์ฅ๋ฉ์๋ forEach๋ ์ง์ํ๋ค.
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
// map.keys()
for(let vege of recipeMap.keys()) {
console.log(vege); // cucumber, tomatoes, onion
}
// map.values()
for(let amount of recipeMap.values()) {
console.log(amount); // 500, 350, 50
}
// map.entries()
for(let entry of recipeMap.entries()) { // .entries() ์๋ถ์ฌ๋ ๋จ
console.log(entry); // [cucumber,500], [tomatoes,350], ...
}
// forEach()
recipeMap.forEach((value, key, map) => {
console.log(`${key}: ${value}`); // cucumber: 500, tomato: 350, ...
};
4. ๊ฐ์ฒด ↔ ๋งต : Object.entries, Object.fromEntries โ
๋ด์ฅ ๋ฉ์๋๋ฅผ ํ์ฉํด์ ๊ฐ์ฒด์ ๋งต์ ์๋ก ๋ฐ๊ฟ ์ ์๋ค.
- Object.entries : ๊ฐ์ฒด → ๋งต
- Object.fromEntries : ๋งต → ๊ฐ์ฒด
// Object.entries : ๊ฐ์ฒด → ๋งต
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
console.log(map(get('name')); // John
// Object.fromEntries : ๋งต → ๊ฐ์ฒด
let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 3);
let obj = Object.fromEntreis(map.entries()); // ๋งต์ ์ผ๋ฐ ๊ฐ์ฒด๋ก ๋ณํ(entries() ์๋ต ๊ฐ๋ฅ)
console.log(obj.orange); // 2
3. ์ (set)
set์ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ๊ฐ์ ๋ชจ์๋์ ํน๋ณํ ์ปฌ๋ ์ ์ผ๋ก, ํค๊ฐ ์๋ ๊ฐ์ด ์ ์ฅ๋๋ค.
1. ์ฃผ์ ๋ฉ์๋ โ
| ๋ฉ์๋ | ์ญํ |
| new Set(iterable) | ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด(๋ณดํต ๋ฐฐ์ด)๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ์ ์์ฑ |
| set.add(value) | ๊ฐ์ ์ถ๊ฐํ๊ณ ์๊ธฐ ์์ ์ ๋ฐํ |
| set.delete(value) | value์ ํด๋นํ๋ ๊ฐ์ ์ ๊ฑฐ, ์ฑ๊ณต ์ true, ์คํจ ์ false ๋ฐํ |
| set.has(value) | ์ ๋ด์ ๊ฐ ์กด์ฌ ์ true, ์๋๋ฉด false ๋ฐํ |
| set.clear() | ์ ์์ ๋ชจ๋ ์์๋ฅผ ์ ๊ฑฐ |
| set.size | ์์์ ๊ฐ์๋ฅผ ๋ฐํ |
set์ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, set.add(value)๋ฅผ ์ฌ๋ฌ๋ณธ ํธ์ถํด๋ ์ค๋ณต ์ถ๊ฐ๊ฐ ๋์ง ์๋๋ค.
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(pete);
console.log(set.size); // 3
for(let user of set) {
console.log(user.name); // John, Pete, Mary
}
๋ฐฐ์ด ๋ฉ์๋์ธ arr.find๋ฅผ ์ด์ฉํ์ฌ ์ค๋ณต ๊ฐ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ผ๋, set๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
2. ์ ์ ์์์ ๋ฐ๋ณต ์์ ํ๋ ๋ฉ์๋ : keys(), values(), entries() โ
์๋ 3๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ ์ ๊ฐ ์์์ ๋ฐ๋ณต ์์ ์ ํ ์ ์๋ค.
| ๋ฉ์๋ | ๋์ |
| map.keys() | ๊ฐ ์์์ ํค๋ฅผ ๋ชจ์ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
| map.values() | ๊ฐ ์์์ ๊ฐ์ ๋ชจ์ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
| map.entries() | ์์์ [ํค, ๊ฐ]์ ํ ์์ผ๋ก ํ๋ iterable ๊ฐ์ฒด๋ฅผ ๋ฐํ |
+ ์ถ๊ฐ๋ก ๋ด์ฅ๋ฉ์๋ forEach๋ ์ง์ํ๋ค.
์ฐธ๊ณ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B25 : ๊ฐ์ฒด ๋ฉ์๋ Object.keys, values, entries (0) | 2025.08.26 |
|---|---|
| B25 : ์ํฌ๋งต๊ณผ ์ํฌ์ (weak) ๊ฐ์ฒด (0) | 2025.08.26 |
| ์ค์ฝํ์ ํธ์ด์คํ ํํค์น๊ธฐ (0) | 2025.08.23 |
| B22 : ๋ฌธ์์ด ์ฌํ (4) | 2025.08.21 |
| B21 : ์ซ์ํ ์ฌํ (0) | 2025.08.21 |
GitHub