210824 ๊ฐœ๋ฐœ๊ธฐ๋ก: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Map() ๊ฐ์ฒด

2021. 8. 25. 08:17ใ†๐Ÿ“” TIL

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Map ๊ฐ์ฒด

๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ key ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์ด๋‹ค.ํ•˜๋‚˜์˜ key์— ํ•˜๋‚˜์˜ value ๊ฐ€ ๋งคํ•‘๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ, ๊ฐ์ฒด(object)์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋กœ ์ด๋ค„์ ธ ์žˆ๋‹ค. 

๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋Š๋‚€ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€, object ์™€ ๋‹ฌ๋ฆฌ forEach() ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. forEach() ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋ฉด Map() ๊ฐ์ฒด์˜ value ๊ฐ€ iterable ํ•˜๊ฒŒ ๋ฆฌํ„ด๋œ๋‹ค.  ๋ฌผ๋ก  object ๋„, Object.keys(obj) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด forEach() ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, key ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ iterator ๊ฐ€ ๋ˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

 

 

Object์™€ Map ๋น„๊ต

1. Object์˜ ํ‚ค๋Š” Strings์ด๋ฉฐ(only strings), Map์˜ ํ‚ค๋Š” ๋ชจ๋“  ๊ฐ’(any)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
2. Object๋Š” ํฌ๊ธฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”์ ํ•ด์•ผํ•˜์ง€๋งŒ, Map์€ size()ํ•จ์ˆ˜๋กœ ํฌ๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. (=> Map.size())

   - ์—ฌ๊ธฐ์„œ ์ˆ˜๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์ถ”์ ํ•œ๋‹ค๋Š” ๋ง์€, for ๋ฌธ์— Object ๋ฅผ ๋„ฃ์–ด ๊ฐ ์›์†Œ๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ํŒŒ์•…ํ•˜๋Š” ์‹์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์ถ”์ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
3. Map์€ ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณต๋œ๋‹ค(์ˆœ์„œ๋ฅผ ์ง€ํ‚จ๋‹ค).

 

Map() ๊ฐ์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ(set)ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š”(get) ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, forEach() ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด iterable ํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.

let m = new Map()

m.set("name", "LIM")
// Map(1) {"name" => "LIM"}

m.set("name", "HOO")
// Map(1) {"name" => "HOO"}

m.get("name")
// "HOO

let m2 = new Map().set("name", "KIM").set("age", 20)
// m2 => Map(2) {"name" => "KIM", "age" => 20}

m2.forEach(m => console.log(m))
// KIM
// 20

m2.map(i => console.log(i)) // TypeError

 

MDN ์—๋Š” Object ๋‚˜ Map ์ค‘์— ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ ์•„๋ž˜ ๋‘๊ฐ€์ง€ ํŒ์„ ์ค€๋‹ค.


1) ์‹คํ–‰ ์‹œ๊นŒ์ง€ ํ‚ค๋ฅผ ์•Œ์ˆ˜ ์—†๊ณ , ๋ชจ๋“  ํ‚ค๊ฐ€ ๋™์ผํ•œ type ์ด๋ฉด์„œ ๋ชจ๋“  ๊ฐ’๋“ค์ด ๋™์ผํ•œ type ์ผ ๊ฒฝ์šฐ objects ๋Œ€์‹  map ์„ ์‚ฌ์šฉํ•ด๋ผ.

=> ๊ฐœ์ธ์ ์œผ๋กœ 1) ์˜ ์ด์œ ๋Š” iterable ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. value ๊ฐ’์ด ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค๋ฉด forEach() ํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•˜์—ฌ ๋™์ผํ•œ ํ•จ์ˆ˜ ๋กœ์ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2). ๊ฐ ๊ฐœ๋ณ„ ์š”์†Œ์— ๋Œ€ํ•ด ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์ด ์žˆ์„ ๊ฒฝ์šฐ, objects ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ.

 



 

reference

https://medium.com/front-end-weekly/es6-map-vs-object-what-and-when-b80621932373

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Keyed_collections