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