32. Map, Set
2026λ 4μ 14μΌ
πΊοΈ 1. λ§΅ (Map): ν€κ° μλ λ°μ΄ν°μ μ κ·Έλ μ΄λ
λ§΅μ κ°μ²΄μ λΉμ·νκ² 'ν€-κ°' μμ μ μ₯νμ§λ§, ν¨μ¬ λ μ μ°νκ³ κ°λ ₯ν©λλ€.
π ν΅μ¬ μ°¨μ΄μ
- μμ λ‘μ΄ ν€: κ°μ²΄λ ν€λ‘ μ€μ§ λ¬Έμμ΄κ³Ό μ¬λ³Όλ§ νμ©νμ§λ§, λ§΅μ κ°μ²΄, μ«μ, λΆλ¦° λ± μ΄λ€ μλ£νλ ν€λ‘ μΈ μ μμ΅λλ€.
- μμ 보μ₯: κ°μ΄ μ½μ λ μμλ₯Ό κΈ°μ΅ν©λλ€.
- size νλ‘νΌν°: λ΄λΆμ μμκ° λͺ κ°μΈμ§ ν λ²μ μ μ μμ΅λλ€.
π οΈ μ£Όμ λ©μλ
map.set(key, value): λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€. (λ©μλ 체μ΄λ κ°λ₯)map.get(key): κ°μ μ½μ΄μ΅λλ€.map.has(key): ν€μ μ‘΄μ¬ μ¬λΆλ₯Ό νμΈν©λλ€.map.size: μμμ μ΄ κ°μλ₯Ό λ°νν©λλ€.
β¨ 2. μ (Set): μ€λ³΅ μλ κ³ μ ν κ°μ μ§ν©
μ μ μ€μ§ **κ°(value)**λ§ μ μ₯νλ©°, μ€λ³΅μ νμ©νμ§ μλ νΉλ³ν 컬λ μ μ λλ€.
π ν΅μ¬ νΉμ§
- μ μΌλ¬΄μ΄μ±: λμΌν κ°μ μ¬λ¬ λ²
addν΄λ ν λ²λ§ μ μ₯λ©λλ€. - μ±λ₯ μ΅μ ν: νΉμ κ°μ΄ μλμ§ νμΈ(
has)ν λ λ°°μ΄μfindλ³΄λ€ ν¨μ¬ λΉ λ¦ λλ€. - μ©λ: λ°©λ¬Έμ λͺ©λ‘ κ΄λ¦¬, μ€λ³΅ λ°μ΄ν° μ κ±° λ±.
π 3. κ°μ²΄ βοΈ λ§΅ λ³ν κ°μ΄λ
κΈ°μ‘΄ κ°μ²΄ κΈ°λ° μ½λμ λ§΅μ ν¨κ» μ¨μΌ ν λ μ μ©ν λ©μλλ€μ λλ€.
| λ³ν λ°©ν₯ | λ©μλ | μ€λͺ |
|---|---|---|
| κ°μ²΄ β λ§΅ | Object.entries(obj) | κ°μ²΄λ₯Ό [ν€, κ°] μμ λ°°μ΄λ‘ λ°κΎΈμ΄ λ§΅ μμ±μμ μ λ¬ν©λλ€. |
| λ§΅ β κ°μ²΄ | Object.fromEntries(map) | λ§΅μ λ°μ΄ν°λ₯Ό νλ²ν μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ‘ λ€μ λ³νν©λλ€. |
ποΈ κΈ°μ λ©΄μ λλΉ (Interview Questions)
Q1. μΌλ° κ°μ²΄ λμ Mapμ μ¬μ©νλ κ²μ΄ μ 리ν κ²½μ°λ μΈμ μΈκ°μ? (μ€κΈ)
λ΅λ³: 첫째, ν€μ νμ μ΄ λ€μν΄μΌ ν λμ λλ€. κ°μ²΄λ₯Ό ν€λ‘ μ¨μ λ°μ΄ν°λ₯Ό λ§€νν΄μΌ νλ€λ©΄ λ§΅μ΄ μ μΌν λμμ λλ€. λμ§Έ, λ°μ΄ν°μ μ½μ μμκ° μ€μν λμ λλ€. μ μ§Έ, λ°μ΄ν°μ μΆκ°/μμ κ° λΉλ²ν λμ λλ€. λ§΅μ μ΄λ¬ν μμ μ μ΅μ νλμ΄ μμ΄ μΌλ° κ°μ²΄λ³΄λ€ λμ μ±λ₯μ 보μ¬μ€λλ€.
Q2. λ°°μ΄μμ μ€λ³΅μ μ κ±°νλ κ°μ₯ ν¨μ¨μ μΈ λ°©λ²μ 무μμΈκ°μ? (κΈ°μ΄)
λ΅λ³: **
Set**μ μ¬μ©νλ κ²μ λλ€.new Set(array)λ₯Ό ν΅ν΄ μ€λ³΅μ΄ μ κ±°λ μ΄ν°λ¬λΈμ λ§λ€κ³ , λ€μArray.from()μ΄λ μ κ° μ°μ°μ([...])λ₯Ό μ¬μ©ν΄ λ°°μ΄λ‘ λ³ννλ©΄ λ©λλ€. μ΄ λ°©μμ $O(n)$μ μκ° λ³΅μ‘λλ‘ λ§€μ° ν¨μ¨μ μ λλ€.
Q3. Mapμμ map.keys()κ° λ°ννλ κ°μ 무μμ΄λ©°, λ°°μ΄ λ©μλλ₯Ό λ°λ‘ μΈ μ μλ μ΄μ λ? (μ¬ν)
λ΅λ³:
map.keys()λ 'μ΄ν°λ¬λΈ(Iterable)' κ°μ²΄λ₯Ό λ°νν©λλ€. μ΄λ λ°°μ΄μ΄ μλκΈ° λλ¬Έμpushλpopκ°μ λ°°μ΄ μ μ© λ©μλκ° μμ΅λλ€. λ°λΌμ λ°°μ΄λ‘ μ¬μ©νλ €λ©΄Array.from(map.keys())λ₯Ό κ±°μ³ μ§μ§ λ°°μ΄λ‘ λ³νν΄μ£Όμ΄μΌ ν©λλ€.
π‘ κΈ°μ΅ν΄μΌ ν μ€μν λ΄μ©
- λ§΅(Map)μ ν€λ₯Ό λΉκ΅ν λ
SameValueZeroμκ³ λ¦¬μ¦μ μλλ€. μ΄λNaN === NaNμtrueλ‘ κ°μ£Όνλ―λ‘,NaNλ λ§΅μ ν€λ‘ μμ νκ² μΈ μ μλ€λ λ»μ λλ€. - μ
(Set)μ
forEachλ μΈμκ° 3κ°μ λλ€. (value, valueAgain, set) μ΄λ λ§΅κ³Όμ μΈν°νμ΄μ€ νΈνμ±μ μν΄ μ€κ³λ ꡬ쑰μ΄λ λΉν©νμ§ λ§μΈμ!
μ λκ·Έλ¨(Anagram) λ¬Έμ μ²λΌ 볡μ‘ν λ¬Έμμ΄ μ‘°ν©μ λ€λ£° λ λ§΅μ νμ©νλ©΄ μ½λκ° ν¨μ¬ κ°κ²°ν΄μ§λλ€.
μμ½
λ§΅μ ν€κ° μλ κ°μ΄ μ μ₯λ 컬λ μ
μ
λλ€.
μ£Όμ λ©μλμ νλ‘νΌν°:
new Map([iterable])Β β λ§΅μ λ§λλλ€.Β[key,value]μμ΄ μλΒiterable(μ: λ°°μ΄)μ μ νμ μΌλ‘ λκΈΈ μ μλλ°, μ΄λ λκΈ΄ μ΄ν°λ¬λΈ κ°μ²΄λ λ§΅ μ΄κΈ°νμ μ¬μ©λ©λλ€.map.set(key, value)Β β ν€λ₯Ό μ΄μ©ν΄ κ°μ μ μ₯ν©λλ€.map.get(key)Β β ν€μ ν΄λΉνλ κ°μ λ°νν©λλ€.Βkeyκ° μ‘΄μ¬νμ§ μμΌλ©΄Βundefinedλ₯Ό λ°νν©λλ€.map.has(key)Β β ν€κ° μμΌλ©΄Βtrue, μμΌλ©΄Βfalseλ₯Ό λ°νν©λλ€.map.delete(key)Β β ν€μ ν΄λΉνλ κ°μ μμ ν©λλ€.map.clear()Β β λ§΅ μμ λͺ¨λ μμλ₯Ό μ κ±°ν©λλ€.map.sizeΒ β μμμ κ°μλ₯Ό λ°νν©λλ€.
μΌλ°μ μΈΒ κ°μ²΄μμ μ°¨μ΄μ :
- ν€μ νμ μ μ μ½μ΄ μμ΅λλ€. κ°μ²΄λ ν€κ° λ μ μμ΅λλ€.
sizeΒ νλ‘νΌν° λ±μ μ μ©ν λ©μλλ νλ‘νΌν°κ° μμ΅λλ€.
μ
μ μ€λ³΅μ΄ μλ κ°μ μ μ₯ν λ μ°μ΄λ 컬λ μ
μ
λλ€.
μ£Όμ λ©μλμ νλ‘νΌν°:
new Set([iterable])Β β μ μ λ§λλλ€.ΒiterableΒ κ°μ²΄λ₯Ό μ νμ μΌλ‘ μ λ¬λ°μ μ μλλ°(λκ° λ°°μ΄μ μ λ¬λ°μ), μ΄ν°λ¬λΈ κ°μ²΄ μμ μμλ μ μ μ΄κΈ°ννλλ° μ°μ λλ€.set.add(value)Β β κ°μ μΆκ°νκ³ μ μμ μ λ°νν©λλ€. μ λ΄μ μ΄λ―ΈΒvalueκ° μλ κ²½μ° μλ¬΄λ° μμ μ νμ§ μμ΅λλ€.set.delete(value)Β β κ°μ μ κ±°ν©λλ€. νΈμΆ μμ μ μ λ΄μ κ°μ΄ μμ΄μ μ κ±°μ μ±κ³΅νλ©΄Βtrue, μλλ©΄Βfalseλ₯Ό λ°νν©λλ€.set.has(value)Β β μ λ΄μ κ°μ΄ μ‘΄μ¬νλ©΄Βtrue, μλλ©΄Βfalseλ₯Ό λ°νν©λλ€.set.clear()Β β μ μ λΉμλλ€.set.sizeΒ β μ μ λͺ κ°μ κ°μ΄ μλμ§ μΈμ€λλ€.
λ§΅κ³ΌΒ μ
μ λ°λ³΅ μμ
μ ν λ, ν΄λΉ 컬λ μ
μ μμλ κ°μ μΆκ°ν μμλλ‘ λ°λ³΅ μμ
μ΄ μνλ©λλ€. λ°λΌμ μ΄ λ 컬λ μ
μ μ λ ¬μ΄ λμ΄μμ§ μλ€κ³ ν μ μμ΅λλ€. κ·Έλ μ§λ§ 컬λ μ
λ΄ μμλ κ°μ μ¬ μ λ ¬νκ±°λ (λ°°μ΄μμ μΈλ±μ€λ₯Ό μ΄μ©ν΄ μμλ₯Ό κ°μ Έμ€λ κ²μ²λΌ) μ«μλ₯Ό μ΄μ©ν΄ νΉμ μμλ κ°μ κ°μ§κ³ μ€λ κ²μ λΆκ°λ₯ν©λλ€.