[ JavaScript ๋ฌธ๋ฒ• ์ข…ํ•ฉ๋ฐ˜ 2์ฃผ์ฐจ (5)] MAP ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

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์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋ฏธ์ง€ ์ขŒ์ธก๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ  1) keys()  2) values()  3)entries() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

 


 

  • Map์˜ ํฌ๊ธฐ ๋ฐ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

Map์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด size ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

console.log(myMap.size); // 3 ์ถœ๋ ฅ

ํŠน์ • ํ‚ค๊ฐ€ Map์— ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด has() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

console.log(myMap.has('two')); // true ์ถœ๋ ฅ

 

์™ผ์ชฝ์—์„œ ๋ณด์ด๋Š” ์˜ˆ์‹œ์™€ ๊ฐ™์ด,

myMap์˜ ์‚ฌ์ด์ฆˆ(๊ธธ์ด)๋Š” 3์ค„์ด๋ฏ€๋กœ 3์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋ฉฐ, two๋Š” myMap key์— ์กด์žฌํ•จ์œผ๋กœ true๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.