πŸŽ₯ Collections and Generators

πŸ‘¨β€πŸ’» Contents

  • Collections
  • Generators
  • The iterable protocol
  • Collections
  • Generators
  • The iterable protocol

Collections

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ”

값을 담을 수 μžˆλŠ” μ»¨ν…Œμ΄λ„ˆ

메이저 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—λŠ”

μ—¬λŸ¬κ°€μ§€ 데이터 μ»¬λ ‰μ…˜λ“€μ΄ μ‘΄μž¬ν•œλ‹€.

  • list, tuple, dictionaries - Python
  • ArrayList, HashMap, HashSet, Queue, Stack ... - Java
  • hashes, arrays - ruby

그럼 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ”..?

ES5 κΉŒμ§€λŠ”

Objects

Arrays

ES6 μ—μ„œλŠ”?

Map

Set

WeakMap

WeakSet

μ™œ ES6의 μ»¬λ ‰μ…˜μ΄ λ‚˜μ™”μ„κΉŒμš”?

Object와 Array보닀 μ΅œμ ν™”λœ κ΅¬ν˜„μ²΄λ₯Ό μ œκ³΅ν•œλ‹€.

Set

  • Set은 value λ“€λ‘œ 이루어진 μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€.
  • Set은 μˆ˜μ • κ°€λŠ₯ν•©λ‹ˆλ‹€.Β 
  • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ Set에 value에 λŒ€ν•œ
  • κ°’μ˜ μΆ”κ°€λ‚˜ μ‚­μ œλ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—¬κΈ°κΉŒμ§€λŠ” λ°°μ—΄κ³Ό κ°™μ§€λ§Œ setκ³Ό λ°°μ—΄μ—λŠ” 차이점이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

값이 μ€‘λ³΅λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이미 μ‘΄μž¬ν•˜λŠ” 값을 μΆ”κ°€ν•˜λ €ν•˜λ©΄ 아무일도 μΌμ–΄λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Set은 λšœλ ·ν•œ λͺ©μ μ„ 가지고 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

λ°”λ‘œ μ–΄λ–€ 데이터가 μžμ‹ μ˜ 멀버인지 ν™•μΈν•˜λŠ” μž‘μ—…μ„ 빨리 μ²˜λ¦¬ν•˜λ €λŠ” λͺ©μ μž…λ‹ˆλ‹€.

Set으둜 ν•  수 μ—†λŠ” 일도 μžˆμŠ΅λ‹ˆλ‹€.

Set은 인덱슀 κ°’μœΌλ‘œ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” 일을 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

Set Methods

Β 

Setμ—μ„œ κ΅¬ν˜„λ˜μ§€ μ•Šμ€ 것

  • array에 이미 μ‘΄μž¬ν•˜λŠ” map, filter, some, every
    같은 ν•¨μˆ˜ λ―Έκ΅¬ν˜„
    Β 
  • λ§Žμ€ 값듀을 ν•œκΊΌλ²ˆμ— μ²˜λ¦¬ν•  수 μžˆλŠ” λ©”μ†Œλ“œλ“€μ΄
    λˆ„λ½ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    Ex.) set.addAll(iterable), set.removeAll(iterable) λ“±λ“±
    Β 
  • Set에 Object 값이 λ“€μ–΄μ˜€λŠ” 경우 레퍼런슀(μ£Όμ†Œ κ°’)이 λ‹€λ₯΄λ©΄
    값이 같아도 λ‹€λ₯΄κ²Œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    Β 

Map

Map은 key - value νŽ˜μ–΄(pair)둜 이루어진 μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€.

Key - Value?

일반 객체 λ¦¬ν„°λŸ΄μ΄ μžˆλŠ”λ°?

일반 κ°μ²΄λ‘œλŠ” 이런 λ¬Έμ œμ μ„ ν•΄κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.Β 

  • 검색 ν…Œμ΄λΈ”(lookup table)둜 μ‚¬μš© 쀑인 객체에 λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•˜λ €λ©΄ 이름 좩돌의 μœ„ν—˜μ„ κ°μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • 속성 key λŠ” μ–Έμ œλ‚˜ λ¬Έμžμ—΄μž…λ‹ˆλ‹€. (ES6 μ—μ„œλŠ” 심볼도 κ°€λŠ₯ν•©λ‹ˆλ‹€).

  • 객체에 μ–Όλ§ˆλ‚˜ λ§Žμ€ 속성이 μ‘΄μž¬ν•˜λŠ”μ§€ μ•Œμ•„λ‚Ό 수 μžˆλŠ” 효과적인 방법이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 일반 κ°μ²΄λŠ” λ°˜λ³΅μ„ ν•˜λ €λ©΄ λ§Žμ€ λΉ„μš©μ΄ μ†Œλͺ¨λ©λ‹ˆλ‹€. Β  Β  Β  Β  Β  Β  Β  Β  Β  Β 

κ°€μž₯ 큰 λ¬Έμ œμ μ€?

일반 κ°μ²΄λŠ” iterable ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.Β 

κ·Έλž˜μ„œ for-of κ΅¬λ¬Έμ΄λ‚˜, ...(destructuring) 문법 λ“±
iterable을 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  문법에 일반 객체λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

Β 

ν•˜μ§€λ§Œ μ§λ©΄ν•œ λ¬Έμ œκ°€ 이런 경우 κΈ°λŠ₯을 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄,

일반 객체λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ˜¬λ°”λ₯Έ μ„ νƒμž…λ‹ˆλ‹€.

μ™œ 이런 μ‹μœΌλ‘œ μ„€κ³„λ˜μ—ˆλŠ”κ°€?

ES6 μ»¬λ ‰μ…˜μ΄ μ‚¬μš©μž 데이터와 빌트인 λ©”μ†Œλ“œ μ‚¬μ΄μ˜ 이름 μΆ©λŒμ„ ν”Όν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆκΈ° λ•Œλ¬Έμ—, ES6 μ»¬λ ‰μ…˜μ€ μžμ‹ μ˜ 멀버 데이터λ₯Ό λ“œλŸ¬λ‚΄κΈ° μœ„ν•΄ 속성(property)을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŠ” ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 멀버 데이터에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ obj.key λ˜λŠ” obj[key] 같은 ꡬ문을 μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. λ°˜λ“œμ‹œ map.get(key) ꡬ문을 μ΄μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 또, ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 멀버 λ°μ΄ν„°λŠ” 속성과 달리 ν”„λ‘œνΌν‹° 체인(property chain)을 톡해 μƒμ†λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이둜 μΈν•œ μž₯점이라면, Object 와 달리 Map κ³Ό Set μ—λŠ” 자유둭게 λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€. 이름 좩돌의 μœ„ν—˜ 없이 객체에 λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ Map을 μ–΄λ–»κ²Œ
μ‚¬μš©ν•˜λƒλ©΄μš”?

μ΄λ ‡κ²Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

Weak Collections
Memory
Garbage Collections

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 가비지 μ»¬λ ‰μ…˜μ€ λ©”λͺ¨λ¦¬ κ΄€λ¦¬μ˜ λ„κ΅¬μž…λ‹ˆλ‹€.

μ°Έμ‘°κ°€ μ—†λŠ” 객체듀을 μžλ™μ μœΌλ‘œ μ œκ±°ν•˜κ³  κ°μ²΄λ“€μ˜ μžμ›μ„ λ˜μ°ΎμŠ΅λ‹ˆλ‹€.

가비지 μ»¬λ ‰μ…˜ μ΄λž€?

Mapκ³Ό Set의 λ©”λͺ¨λ¦¬

Β 

Mapκ³Ό Set이 μ°Έμ‘°ν•˜λŠ” 객체 듀은 κ°•ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
이것은 가비지 μ»¬λ ‰μ…˜μ΄ λ©”λͺ¨λ¦¬λ₯Ό μˆ˜κ±°ν•˜μ§€ λͺ»ν•˜κ²Œ ν•©λ‹ˆλ‹€.

λ§Œμ•½ 크기가 큰 Mapκ³Ό Set의 객체가 더 이상 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄
가비지 μ»¬λ ‰μ…˜μ—μ„œ 이것을 κ°€μ Έκ°€κΈ° μœ„ν•΄ λΉ„μ‹Ό λΉ„μš©μ„ μΉ˜λ€„μ•Ό ν•©λ‹ˆλ‹€.

Β 

ES6의 ν•΄κ²° λ°©μ•ˆ

Weak Set, Weak Map

이 ES6의 μ»¬λ ‰μ…˜ 듀은 더 이상 μ‚¬μš©λ˜μ§€ μ•Šμ„ λ•Œ,
λ©”λͺ¨λ¦¬μ—μ„œ μ‰½κ²Œ μ‚­μ œ 되기 μœ„ν•΄ 'μ•½ν•œ' 결합을 μœ μ§€ν•©λ‹ˆλ‹€.

Weak Map

Weak Map은 Mapκ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€. 단지 λ©”μ„œλ“œκ°€ λͺ‡ 개 μ—†κ³ ,
가비지 μ»¬λ ‰μ…˜μ˜ μ²˜λ¦¬κ°€ λ‹€λ¦…λ‹ˆλ‹€.

Use Case - Private data

Weak Set

Weak Set μ—­μ‹œ Set μ»¬λ ‰μ…˜κ³Ό
λΉ„μŠ·ν•˜μ§€λ§Œ λ©”μ„œλ“œκ°€ λͺ‡ 개 μ—†κ³ ,


가비지 μ»¬λ ‰μ…˜μ„ μœ„ν•΄ μ•½ν•œ 결합을 μœ μ§€ν•©λ‹ˆλ‹€.

Symbol이 λ‚˜μ˜€κΈ° μ „κΉŒμ§€ 객체의 νƒœκ·Έ κ°’μœΌλ‘œ 주둜 μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ²°Β  Β  Β λ‘ 

Mapκ³Ό Set은 ν‚€/κ°’μ˜ 쌍으둜 이루어진 ES6의 μƒˆλ‘œ λ‚˜μ˜¨ μ»¬λ ‰μ…˜ μž…λ‹ˆλ‹€.

즉, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체 λ¦¬ν„°λŸ΄μ€ μ—¬μ „νžˆ λ§Žμ€ μƒν™˜μ—μ„œ μ»¬λ ‰μ…˜μœΌλ‘œμ¨ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ ES6 μ»¬λ ‰μ…˜λ“€μ΄ ν•„μš”ν•œ 상황이 μ•„λ‹ˆλΌλ©΄ ꡳ이 μƒˆλ‘œμš΄ μ»¬λ ‰μ…˜μœΌλ‘œ ꡐ체할 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

Β 

잠깐, 그럼 μ–Έμ œ 써야해?

MDN이 μ•Œλ €μ£ΌλŠ” μ μ ˆν•œ μ§ˆλ¬Έλ“€

  • ν‚€ λ“€μ˜ 평균 μ‹€ν–‰ μ‹œκ°„μ„ μ•Œμˆ˜ μ—†λŠ”λ°,
    λ™μ μœΌλ‘œ 쑰회 ν•΄μ•Ό ν•˜λŠ”κ°€?
  • λͺ¨λ“  값듀이 같은 νƒ€μž…λ“€μ„ 가지며,
    μ„œλ‘œ κ΅ν™˜λ˜μ„œ μ‚¬μš©ν•  수 μžˆλŠ”κ°€?
  • λ¬Έμžμ—΄μ΄ μ•„λ‹Œ ν‚€ 듀이 ν•„μš”ν•œκ°€?
  • ν‚€-κ°’μ˜ 쌍이 자주 μΆ”κ°€ λ˜λŠ” μ‚­μ œ λ˜λŠ”κ°€?
  • ν‚€-κ°’μ˜ 쌍의 양이 자주 λ³€ν™” λ˜λŠ”κ°€?
  • μ»¬λ ‰μ…˜μ΄ λ°˜λ³΅λ˜μ•Ό ν•˜λŠ”κ°€?

이럴 λ•Œ μ‚¬μš©ν•˜λΌ!!!