Map

1. κ°œμš”

ES6λΆ€ν„° λ„μž…λœ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체인 λ§΅(Map)κ³Ό μ…‹(Set)은 기쑴의 자료ꡬ쑰인 객체와 λ°°μ—΄κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ 차이점이 λΆ„λͺ… μ‘΄μž¬ν•©λ‹ˆλ‹€. 이번 μ±•ν„°μ—μ„œλŠ” 객체와 λ°°μ—΄κ³Ό λ‹€λ₯Έ λ§΅κ³Ό μ…‹μ˜ νŠΉμ§•μ„ μ•Œμ•„λ³΄μž.


2. Object vs Map

  • Object의 ν‚€λŠ” String이며, Map은 λ¬Έμžμ—΄μ΄ μ•„λ‹Œ 값도 ν‚€λ‘œ μ„€μ •ν•  수 μžˆλ‹€.

  • Map은 크기λ₯Ό κ°„λ‹¨ν•œ λ°©λ²•μœΌλ‘œ κ°€μ Έμ˜¬ 수 μžˆλ‹€.

  • Map은 μΆ”κ°€λœ μˆœμ„œλŒ€λ‘œ λ°˜λ³΅ν•œλ‹€.


3. λ§΅(Map) 객체 생성

맡은 ν‚€κ°€ μžˆλŠ” 데이터λ₯Ό μ €μž₯ν•œλ‹€λŠ” μ μ—μ„œ 객체와 μœ μ‚¬ν•˜μ§€λ§Œ 맡은 킀에 λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ ν—ˆμš©ν•œλ‹€λŠ” μ μ—μ„œ 차이가 μžˆλ‹€.

λ¨Όμ € λ§΅ 객체 μƒμ„±ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

3-1. 빈 Map 객체 생성

let map = new Map();
map_obj_create

3-2. [ν‚€, κ°’] ν˜•νƒœμ˜ 쀑첩 배열을 μ „λ‹¬ν•˜μ—¬ Map 객체 생성

  1. κΈ°λ³Έ 생성 방법

    map_obj_create 2

  2. λ§Œμ•½, μ€‘λ³΅λ˜λŠ” ν‚€κ°€ μ‘΄μž¬ν•  경우 λ§ˆμ§€λ§‰ 값이 μ μš©λœλ‹€.

    map_object_create 2

  3. [ν‚€, κ°’]μ—μ„œ 값은 객체가 될 수 μžˆλ‹€.

    map_object_create 4

  4. [ν‚€, κ°’]μ—μ„œ 킀도 객체가 될 수 μžˆμ§€λ§Œ κ³ μœ ν•œ 값이 될 수 μ—†λ‹€.

    map_object_create 5


3-3. Map.set(key, value): keyλ₯Ό μ΄μš©ν•΄ valueλ₯Ό μ €μž₯

  1. κΈ°λ³Έ μ‚¬μš© 방법

    map_object_create 6

  2. 체이닝 방법

    map.set을 ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ λ§΅ μžμ‹ μ΄ λ°˜ν™˜λœλ‹€. 이λ₯Ό μ΄μš©ν•˜μ—¬ map.set을 체이닝(chaining)ν•  수 μžˆλ‹€.

    map_object_create 7


3-4. Object.entries(obj): ν‰λ²”ν•œ 객체λ₯Ό κ°€μ§€κ³  λ§΅(Map) λ§Œλ“€κΈ°

ν‰λ²”ν•œ 객체λ₯Ό κ°€μ§€κ³  λ§΅(Map)을 λ§Œλ“€κ³  μ‹ΆμœΌλ©΄ λ‚΄μž₯ λ©”μ„œλ“œ Object.entries(obj)λ₯Ό ν™œμš©ν•΄μ•Ό ν•œλ‹€. 이 λ©”μ„œλ“œλŠ” 객체의 ν‚€-κ°’ μŒμ„ μš”μ†Œ([key, value])둜 κ°€μ§€λŠ” 배열을 λ°˜ν™˜ν•œλ‹€.

예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같은 ν‰λ²”ν•œ 객체가 μžˆλ‹€.

μœ„μ˜ obj객체λ₯Ό Object.entries(obj)의 인자둜 λ„£κ²Œ 되면 ν‚€-κ°’ μŒμ„ μš”μ†Œ([key, value])둜 κ°€μ§€λŠ” 배열을 λ°˜ν™˜ν•œλ‹€. (μ•„λž˜μ˜ μ½”λ“œ 및 사진 μ°Έκ³ )

map_object_create 8

entreis은 각 μš”μ†Œκ°€ [ν‚€, κ°’] 쌍인 배열이닀. κ·ΈλŸ¬λ―€λ‘œ new Map()에 μ „λ‹¬ν•˜μ—¬ μƒˆλ‘œμš΄ 맡을 λ§Œλ“€ 수 μžˆλ‹€.

map_object_create 9

4. Map의 μ£Όμš” λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹°

4-1. Map.get(key)

key에 ν•΄λ‹Ήν•˜λŠ” 값을 λ°˜ν™˜ν•œλ‹€. keyκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

map_get

map을 μ‚¬μš©ν•  땐 mapμ „μš© λ©”μ„œλ“œ set, get 등을 μ‚¬μš©ν•˜μž. κΈ°μ‘΄ κ°μ²΄μ—μ„œ μ‚¬μš©ν–ˆλ˜ 방법은 map을 일반 객체처럼 μ·¨κΈ‰ν•˜κ²Œ λ˜μ–΄ μ—¬λŸ¬ μ œμ•½μ΄ 생긴닀.


4-2. Map.has(key)

keyκ°€ μ‘΄μž¬ν•˜λ©΄ true, μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

map_has

4-3. Map.delete(key)

key에 ν•΄λ‹Ήν•˜λŠ” 값을 μ‚­μ œν•œλ‹€.

map_delete

4-4. Map.clear()

λ§΅ μ•ˆμ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ œκ±°ν•œλ‹€.

map_clear

4-5. Map.size

μš”μ†Œμ˜ 개수λ₯Ό λ°˜ν™˜ν•œλ‹€.

map_size

4-6. Map.keys()

각 μš”μ†Œμ˜ ν‚€λ₯Ό λͺ¨μ€ 반볡 κ°€λŠ₯ν•œ(iterable, μ΄ν„°λŸ¬λΈ”) 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.

map_keys

4-7. Map.values()

각 μš”μ†Œμ˜ 값을 λͺ¨λ“  μ΄ν„°λŸ¬λΈ” 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.

map_values

4-8. Map.entries()

μš”μ†Œμ˜ [ν‚€, κ°’]을 ν•œ 쌍으둜 ν•˜λŠ” μ΄ν„°λŸ¬λΈ” 객체λ₯Ό λ°˜ν™˜ν•œλ‹€. 이 μ΄ν„°λŸ¬λΈ” κ°μ²΄λŠ” for...of반볡문의 기초둜 쓰인닀.

map_entries

μ•„λž˜λŠ” for...ofλ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ [ν‚€, κ°’] μŒμ„ λŒ€μƒμœΌλ‘œ μˆœνšŒν•˜λŠ” μ½”λ“œμ΄λ‹€.

두 반볡문의 κ²°κ³ΌλŠ” κ°™λ‹€.

map_entries 2

맡은 λ°°μ—΄κ³Ό μœ μ‚¬ν•˜κ²Œ λ‚΄μž₯ λ©”μ„œλ“œ forEach도 μ§€μ›ν•œλ‹€.

map_forEach


4-9. Object.fromEntries

맡을 객체둜 λ°”κΎΈκΈ° μœ„ν•΄μ„œλŠ” Object.fromEntriesλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. 이 λ©”μ„œλ“œλŠ” 각 μš”μ†Œκ°€ [ν‚€, κ°’] 쌍인 배열을 객체둜 λ°”κΏ”μ€€λ‹€.

map_fromEntries

ν•˜μ§€λ§Œ ꡳ이 map.entries()λ₯Ό ν•˜μ§€μ•Šκ³  Object.fromEntries() λ©”μ„œλ“œμ˜ 인자둜 λ§΅(Map)을 전달해도 λœλ‹€.

Object.fromEntriesλŠ” 인자둜 μ΄ν„°λŸ¬λΈ” 객체λ₯Ό λ°›κΈ° λ•Œλ¬Έμ— κΌ­ 배열을 전달해쀄 ν•„μš”λŠ” μ—†λ‹€.(맡도 μ΄ν„°λŸ¬λΈ” 객체이닀.)

즉, μ•„λž˜μ™€ 같이 μœ„μ˜ μ½”λ“œλ₯Ό μˆ˜μ •ν•  수 μžˆλ‹€.


5. Conclusion

μ˜›λ‚  λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive책을 보며 κ³΅λΆ€ν–ˆλ˜ 적이 μžˆλ‹€. κ·Έ 책에 λ‚˜μ™”λ˜ λ‚΄μš© 쀑 ν•˜λ‚˜κ°€ λ°”λ‘œ 였늘 κ³΅λΆ€ν•œ λ§΅(Map)에 λŒ€ν•΄ 봀던 기얡이 μžˆλ‹€. λ‹Ήμ‹œμ—λŠ” 정말 λŒ€~~μΆ© 보고 λ„˜κ²ΌκΈ° λ•Œλ¬Έμ— 였늘 κ³΅λΆ€ν•˜λ©΄μ„œλ„ 많이 μƒμ†Œν•˜κ²Œ λŠκΌˆλ‹€. λ˜ν•œ μ΄ν„°λŸ¬λΈ”μ™€ 같은 κ°œλ…λ„ μ˜€λžœλ§Œμ— λ³΄λŠ” 것이기에 머리속이 λ³΅μž‘ν•΄μ‘Œλ‹€. λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive책을 λ‹€μ‹œ λ³΄λ©΄μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κΈ°λ³ΈκΈ°λ₯Ό νƒ„νƒ„νžˆ λ‹€μ§ˆ 수 μžˆλ„λ‘ ν•˜μž. μ²˜μŒλΆ€ν„° λ‹€μ‹œ 보며 ν•˜λ‚˜ν•˜λ‚˜ λ‚΄ κ²ƒμœΌλ‘œ λ§Œλ“€μ–΄ 보자! μ•„λ§ˆ κ·Έ 땐 μ•Œλ˜ λ‚΄μš©λ³΄λ‹€λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μž‘λ™ν•˜λŠ” 원리, μƒμ†Œν•œ κ°œλ…μ„ λ¨Όμ € μ •λ¦¬ν•˜λ©° κ³΅λΆ€ν•˜μ§€ μ•Šμ„κΉŒ μ‹Άλ‹€. 맡에 λŒ€ν•œ λŠλ‚Œμ€ λ°˜λ³΅κ°€λŠ₯ν•œ κ°μ²΄μ΄λ―€λ‘œ Array.forEach()λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 점이 μ‹ κΈ°ν•˜μ˜€λ‹€. λ‹Ήμ—°νžˆ for...ofꡬ문도 μ‚¬μš©ν•˜λ‹ˆ μ½”ν…Œλ₯Ό ν’€κ³  곡뢀할 λ•Œ 맡을 잘 ν™œλ™ν•˜λ„λ‘ ν•΄μ•Όκ² λ‹€.


μ°Έκ³ 

λ§΅κ³Ό μ…‹ [JavaScript]Map 객체


πŸ“… 2022-08-08

Last updated