JavaScript Visualized: π‘π Generators and Iterators
Posted on September 03, 2020Β - Β 8 min readreference: https://dev.to/lydiahallie/javascript-visualized-generators-and-iterators-e36
ES6μ μμ£Ό λ©μλ κ² μΆκ°λμ΅λλ€. κ·Έ μ΄λ¦μ μ λλ μ΄ν° ν¨μμ λλ€. π μ κ° μ¬λλ€μκ² μ λλ μ΄ν° ν¨μμ λν΄ λ¬ΌμΌλ©΄ λ³΄ν΅ λμμ€λ λλ΅μ: βκ·Έκ±Έ ν λ² λ³Έ μ μ μμ§λ§ μ’ ν·κ°λ €μ κ·Έλ₯ μ λ΄β, βμ λλ μ΄ν°μ λν λΈλ‘κ·Έ κΈμ μλ μμ΄ μ½μλλ° μμ§λ μ΄ν΄κ° μ λΌβ, βκ·Έκ±Έ μμ§λ§ λκ° κ·Έκ±Έ μΈκΉβ π€ λλ μ΄λ° κ²λ€μ΄ μλ§ μ€λ μκ° λμ μκ°νλ©° λ μμ κ³Ό λ λνκ² μ£ . νμ§λ§ μ΄κ±΄ μμ£Ό μ’μ κΈ°λ₯μ λλ€.
κ·ΈλΌ, μ λλ μ΄ν° ν¨μκ° λκΉμ? λ¨Όμ μΌλ°μ μ΄κ³ μ ν΅μ μΈ ν¨μλ₯Ό 보λλ‘ νμ£ . π΅πΌ
λ€ λ λ³ κ±° μμ£ ! λ‘κ·Έλ₯Ό 4λ² λ¨κΈ°λ νλ²ν ν¨μμ λλ€. νΈμΆμ ν΄λ³ΌκΉμ!
βκ·Όλ° λ¦¬λμ, μ μ΄ λ»ν ν¨μλ₯Ό λ³΄κ² ν΄μ λ΄ μΈμμ 5μ΄λ μκ°μ νλΉνμ§?β μμ£Ό μ’μ μ§λ¬Έμ λλ€. 보ν΅μ ν¨μλ run-to-completion λͺ¨λΈμ λ°λ¦ λλ€: ν¨μλ₯Ό νΈμΆνλ©΄, ν¨μλ μλ£κ° λ λκΉμ§ μ€νλλ€ (μ, μ΄λκ°μ μλ¬κ° μλ€λ©΄μ.) μ°λ¦° μμλ‘ μ€κ°μ μ°λ¦¬κ° μνλ μμ μμ ν¨μλ₯Ό λ©μΆ μκ° μμ΅λλ€.
μ΄μ μμ£Ό λ©μ§ λΆλΆμ λλ€: μ λλ μ΄ν° ν¨μλ run-to-completion λͺ¨λΈμ λ°λ₯΄μ§ μμ΅λλ€! π€― μ΄ λ§μ μ λλ μ΄ν° ν¨μλ₯Ό μ€ν μ€κ°μ μμλ‘ μ€μ§ μν¬ μ μλ€λ λ»μΌκΉμ? μ, λΉμ·ν©λλ€! μ΄μ μ λλ μ΄ν° ν¨μκ° λμ§, μ΄λ»κ² μ¬μ©νλμ§ λ³΄λλ‘ νκ² μ΅λλ€.
μ°λ¦° function
ν€μλ λ€μ *
κΈ°νΈλ₯Ό μ¬μ©νμ¬ μ λλ μ΄ν° ν¨μλ₯Ό λ§λ€ μ μμ΅λλ€.
νμ§λ§ μ΄κ²μ΄ μ λλ μ΄ν° ν¨μλ₯Ό μ¬μ©νκΈ° μν΄ ν΄μΌνλ μ λΆλ μλλλ€! μ λλ μ΄ν° ν¨μλ μ€μ λ‘ μΌλ°μ μΈ ν¨μμ μμ ν λ€λ₯Έ λ°©μμΌλ‘ λμν©λλ€:
- μ λλ μ΄ν° ν¨μμ νΈμΆμ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°ννλλ°, μ΄λ μ΄ν°λ μ΄ν°μ λλ€.
- μ λλ μ΄ν° ν¨μ λ΄μμ
yield
ν€μλλ₯Ό ν΅ν΄ μ€νμ μ€μ§ μν¬ μ μμ΅λλ€.
κ·Έλ°λ° μ΄κ²μ΄ λ μλ―Έν κΉμ!?
λ¨Όμ 첫 λ²μ§Έλ‘ κ°λ³΄μ£ : *μ λλ μ΄ν° ν¨μμ νΈμΆμ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°νν©λλ€.* μΌλ°μ μΈ ν¨μλ₯Ό νΈμΆ ν λ, ν¨μμ λ°λ μμμ΄ μ€νλκ³ λ§μ§λ§μΌλ‘ κ°μ λ°νν©λλ€. νμ§λ§ μ λλ μ΄ν° ν¨μλ₯Ό μ€νν λλ, μ λλ μ΄ν° κ°μ²΄κ° λ°νλ©λλ€! κ·ΈλΌ λ°νλ κ°μ λ‘κ·Έλ‘ λ¨κ²Όμ λ μ΄λ»κ² μκ²Όλμ§ λ³΄λλ‘ νμ£ .
μ΄μ , μμ£Ό 볡μ‘ν΄λ³΄μ΄λ κ²λ€ λλ¬Έμ λ΄μ λΉλͺ μ (νΉμ νμ€λ‘ π) μ§λ₯΄μ€ κ±°μμ. νμ§λ§ κ±±μ λ§μΈμ. μ¬κΈ° λ‘κ·Έλ‘ λ¨κ²¨μ§ μμ±λ€μ μ€μ λ‘ μ¬μ©ν νμλ μμ΅λλ€. κ·Έλ λ€λ©΄ μ λλ μ΄ν° κ°μ²΄λ λκ° μ’μ κ±ΈκΉμ?
λ¨Όμ μ κΉ λ€λ‘ κ°μ μΌλ° ν¨μμ μ λλ μ΄ν° ν¨μμ λ λ²μ§Έ μ°¨μ΄μ λν΄ λ΅μ ꡬν΄μΌ ν©λλ€: *yield
ν€μλλ₯Ό ν΅ν΄ μ λλ μ΄ν° ν¨μμ μ€νμ μ€μ§μν¬ μ μμ΅λλ€.*
μ λλ μ΄ν° ν¨μλ‘ μ°λ¦° μ΄λ κ² μΈ μ μμ΅λλ€. (genFunc
λ generatorFunction
μ μ€μλ§μ
λλ€): μ κΈ°μμ yield
ν€μλκ° νλ μΌμ λμ£ ? yield
ν€μλλ₯Ό λ§λ λλ§λ€ μ λλ μ΄ν°μ μ€νμ΄ μ μ§λ©λλ€. κ·Έλ¦¬κ³ κ°μ₯ μ’μ μ μ λ€μμ ν¨μλ₯Ό μ€ννλ©΄, μ΄μ μ λ©μΆ κ³³μ κΈ°μ΅νκ³ κ·Έ κ³³μμλΆν° μ€νλλ€λ μ μ΄μ£ ! πκΈ°λ³Έμ μΈ λμλ€μ
λλ€. (λμ€μ μ λλ©μ΄μ
μΌλ‘ 보μ¬λ릴ν
λ κ±±μ λ§μΈμ):
- 맨 μ²μ μ€νλλ©΄, 첫 λ²μ§Έ λΌμΈμμ λ©μΆκ³ λ¬Έμμ΄ κ° Β
'β¨'
μ μ€λλ€. - λ λ²μ§Έ μ€νμμλ μ΄μ μ
yield
ν€μλκ° μλ κ³³μμ μμμ ν©λλ€. λ λ²μ§Έyield
ν€μλκ° λμ€κΈ° μ κΉμ§ λ΄λ €κ°λ©°'π'
κ°μ μ€λλ€. - μΈ λ²μ§Έ μ€νμμλ μ΄μ
yield
ν€μλμμλΆν° μμνλ©°,return
ν€μλλ₯Ό λ§λ λκΉμ§ μ€νλκ³'Done!'
μ λ°νν©λλ€.
κ·Έλ°λ°..μ λλ μ΄ν° ν¨μμ νΈμΆμμ λ°νν κ²μ΄ μ λλ μ΄ν° κ°μ²΄μΈλ° μ΄λ»κ² ν¨μλ₯Ό νΈμΆν μ μμκΉμ? π€μ¬κΈ°μμ μ λλ μ΄ν° κ°μ²΄κ° λμν©λλ€!
μ λλ μ΄ν° κ°μ²΄λ next
λΌλ λ©μλλ₯Ό ν¬ν¨ν©λλ€(νλ‘ν νμ
체μΈμμμ). μ΄ λ©μλλ μ λλ μ΄ν° κ°μ²΄λ₯Ό λ°λ³΅νλλ° μ¬μ©λλ κ²μ
λλ€. νμ§λ§, yieldλ‘ κ°μ λκ²¨μ€ μνλ₯Ό κΈ°μ΅νκΈ° μν΄ μ°λ¦° μ λλ μ΄ν° κ°μ²΄λ₯Ό λ³μμ ν λΉν΄μ€μΌ ν©λλ€. μ κ·Έκ±Έ genObj
λΌκ³ λΆλ₯Όκ±΄λ° generatorObject
λ₯Ό μ€μμ΄μ.
λ€, μ°λ¦¬κ° μ΄μ μ λ΄€λ 볡μ‘νκ² μκΈ΄ λ
μμ
λλ€. κ·ΈλΌ genObj
λΌλ μ λλ μ΄ν° κ°μ²΄μμ next
λ©μλλ₯Ό νΈμΆν λ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§ λ³΄λλ‘ νμ£ !
μ λλ μ΄ν°λ 첫 λ²μ§Έ λΌμΈμ μλ 첫 λ²μ§Έ yield
ν€μλλ₯Ό λ§λ λκΉμ§ μ€νλμ΅λλ€. μ΄κ²μ΄ μ£Όλ κ°μ²΄λ value
μμ±κ³Ό done
μμ±μ ν¬ν¨νκ³ μμ΅λλ€.
{ value: ... , done: ... }
value
μμ±μ μ°λ¦¬κ° λ겨쀬λ κ°μ΄λ κ°μ΅λλ€. done
μμ±μ Boolean κ°μΌλ‘, μ λλ μ΄ν° ν¨μκ° λ°νλ λλ§ true
κ° λ©λλ€. (yieldκ° μλμμ! π).
μ λλ μ΄ν°μμ λ°λ³΅νλ κ±Έ λ©μ·λλ°, λ§μΉ ν¨μκ° μ μ§ν κ²μ²λΌ 보μ΄μ£ ! μ΄κ² μ λ§ λ©μ§ κ²λλ€. κ·ΈλΌ next
λ©μλλ₯Ό λ€μ νΈμΆν΄λ³΄μ£ ! π
λ¨Όμ , λ¬Έμμ΄ First log!
κ° μ½μμ λ‘κ·Έλ‘ λ¨κ²¨μ§λλ€. μ΄κ±΄ yield
λ return
ν€μλκ° μλλΌ κ³μ μ§νλ©λλ€! κ·Έλ° λ€μ 'π'
κ°μ΄ μλ yield
ν€μλλ₯Ό λ§λμ£ . λκ²¨μ§ κ°μ²΄μ value
μμ±μ κ°μΌλ‘ 'π'
κ° μκ³ , done
μμ±μ΄ μμ΅λλ€. done
μμ±μ μ λλ μ΄ν°κ° μμ§ λ°νλ κ²μ΄ μλκΈ° λλ¬Έμ false
μ
λλ€.
κ±°μ λ€ μμ΄μ! next
λ₯Ό λ§μ§λ§μΌλ‘ νΈμΆν΄λ³΄μ£ .
λ¬Έμμ΄ Second log!
κ° μ½μμ λ‘κ·Έλ‘ λ¨κ²¨μ§λλ€. κ·Έ λ€ return
ν€μλμ κ°μΌλ‘ Done!
μ λ§λ©λλ€. λ°νλ κ°μ²΄μ value
μμ±μ Done!
μ΄ μμ΅λλ€. μ΄λ²μ μ€μ λ‘ λ°νν κ²μ΄κΈ° λλ¬Έμ done
μλ true
κ° ν λΉλμμ΅λλ€!
done
μμ±μ μ€μ λ‘ μμ£Ό μ€μν©λλ€. μ°λ¦° μ λλ μ΄ν° κ°μ²΄λ₯Ό λ± ν λ²λ§ μνν μ μμ΅λλ€. λλΌκ΅¬μ?! κ·ΈλΌ next
λ©μλλ₯Ό ν λ² λ νΈμΆνλ©΄ λ¬΄μ¨ μΌμ΄ μΌμ΄λμ£ ?
κ·Έλ₯ κ³μ undefined
κ° λ°νλ©λλ€. λ§μ½ ν λ² λ μννκ³ μΆλ€λ©΄, μλ‘μ΄ μ λλ μ΄ν° κ°μ²΄λ₯Ό μμ±νμλ©΄ λ©λλ€!
λ°©κΈ λ³΄μ
¨λ κ²μ²λΌ, μ λλ μ΄ν° ν¨μλ μ΄ν°λ μ΄ν° (μ λλ μ΄ν° κ°μ²΄)λ₯Ό λ°νν©λλ€. κ·Έλ°λ°, μ΄ν°λ μ΄ν°λ₯Ό κΈ°λ€λ¦°λ€λ 건? μ°λ¦¬κ° for of
루νλ₯Ό μΈ μ μλ€λ κ±°κ³ , spread μ°μ°μλ₯Ό λ°νλ κ°κ²μ μΈ μ μλ€λ κ±ΈκΉμ? κ·ΈλΌμ! π€©
ν λ² [... ]
λ¬Έλ²μ μ¬μ©νμ¬ λκ²¨μ§ κ°λ€μ spread μ°μ°μλ‘ λ£μ΄λ³΄μ£ .
λλ for of
루νλ₯Ό μ¬μ©νλ κ²λ?!
μμ²λκ² κ°λ₯μ± μμ£ !
κ·Έλ°λ° 무μμ΄ μ΄ν°λ μ΄ν°λ₯Ό μ΄ν°λ μ΄ν°λ‘ λ§λλμ? μ°λ¦° for-of
루νμ λ°°μ΄μ spread λ¬Έλ², λ¬Έμμ΄, Map, Set λν μΈ μ μκΈ° λλ¬Έμ
λλ€. μ΄κ²λ€μ μ€μ λ‘ μ΄ν°λ μ΄ν° νλ‘ν μ½λ‘ ꡬνλμ΄ μμ΅λλ€: [Symbol.iterator]
. λ€μκ³Ό κ°μ κ°μ κ°κ³ μλ€κ³ ν΄λ³΄μ£ . (μμ£Ό μ₯ν©ν©λλ€ ππΌββοΈ):
array
, string
, generatorObject
λ λͺ¨λ μ΄ν°λ μ΄ν°μ
λλ€! ν λ² [Symbol.iterator]
μμ± κ°μ 보λλ‘ νμ£ .
κ·ΈλΌ λ°λ³΅ν μ μλ κ°λ€μ [Symbol.iterator]
κ°μ μ΄λ¨κΉμ?
λ€. κ·Έλ₯ μμ£ . κ·ΈλΌ..μλμΌλ‘ [Symbol.iterator]
μμ±μ μΆκ°νκ³ , μνν μ μλ κ²μ μνν μ μλλ‘ λ§λ€ μ μλμ? λ€ κ°λ₯νμ£ ! π
[Symbol.iterator]
λ μ΄ν°λ μ΄ν°λ₯Ό λ°νν΄μΌ νκ³ , μ΄μ μ λ΄€λ κ² κ°μ κ°μ²΄μ next
λ©μλλ₯Ό ν¬ν¨ν΄μΌν©λλ€: { value: '...', done: false/true }
.
κ°λ¨νκ² μ μ§νκΈ° μν΄ (μ κ° μ’ κ²μλ¬μ) μ°λ¦° κΈ°λ³Έμ μΌλ‘ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ κ²μΌλ‘μ¨ [Symbol.iterator]
μ κ°μ μ λλ μ΄ν° ν¨μλ‘ ν λΉν μ μμ΅λλ€. κ°μ²΄λ₯Ό μνν μ μλλ‘ λ§λ€μ΄λ³΄κ³ , μ 체 κ°μ²΄λ₯Ό λ겨μ€λ³΄λλ‘ νκ² μ΅λλ€:
μ°λ¦¬ object
κ°μ²΄μ for-of 루νλ spread λ¬Έλ²μ μ¬μ©ν λ μ΄λ»κ² λλμ§ λ³΄μμ£ !
λλ κ°μ²΄μ ν€λ§ μ»κ³ μΆλ€λ©΄μ. βλ무 μ½μ£ . κ·Έλ₯ this
λμ Object.keys(this)
λ§ λκΈ°λ©΄ λ©λλ€!β
ν ν λ² ν΄λ³΄μ£ .
μ€ μ΄λ°. Object.keys(this)
λ λ°°μ΄μ΄μμ, κ·ΈλΌ λ겨μ§λ κ°μ λ°°μ΄μ΄μ£ . κ·Έλ¦¬κ³ λμ μ΄ λ°°μ΄μ λ€λ₯Έ λ°°μ΄μ spread λ¬Έλ²μ μ¬μ©νλ©΄ κ²°κ³Όλ λ°°μ΄μ ν¬ν¨νλ λ°°μ΄μ΄ λ©λλ€. μ΄κ±Έ μνλ 건 μλμ£ , μ°λ¦° κ°κ°μ ν€λ§ λκΈ°κ³ μΆμΌλκΉμ!
μ’μ μμμ΄ μμ΅λλ€! π₯³yield
ν€μλλ₯Ό μ¬μ©νμ¬ μ λλ μ΄ν° λ΄μμ μ΄ν°λ μ΄ν°λ₯Ό κ°κ° λκΈΈ μ μμ΄μ, κ·ΈλΌ
μ λΆμ¬μ
yieldλ₯Ό ν΄λ³΄μ£ ! 첫 λ²μ§Έ yieldκ° μ보카λμΈ μ λλ μ΄ν° ν¨μκ° μλ€κ³ ν΄λ³΄μ£ . κ·Έλ¦¬κ³ λ€μ yieldμμ λ€λ₯Έ λ°λ³΅μμ κ°λ€μ κ°κ° λκ²¨μ£Όκ³ μΆλ€κ³ ν©μλ€ (μ΄λ² κ²½μ°μ λ°°μ΄μ
λλ€). μ¬κΈ°μ
yield`Β ν€μλλ₯Ό μΈ μ μμ΅λλ€. κ·Έλ¬ λ€μ λ€λ₯Έ μ λλ μ΄ν°μ *μμν©λλ€!
genObj
μ΄ν°λ μ΄ν°μμ μνλμ΄ μ§κΈ° μ μ, μμλ μ λλ μ΄ν°μ κ°κ°μ κ°λ€μ΄ λ겨μ§λλ€.
μ΄κ²μ΄ κ°μ²΄μ λͺ¨λ ν€λ₯Ό κ°κ° μ»κΈ° μν΄ μ°λ¦¬κ° ν΄μΌνλ μΌλ€μ λλ€.
μ λλ μ΄ν° ν¨μμ λ€λ₯Έ μ¬μ©λ²μ μ°λ¦¬κ° (μΌμ’ μ) μ΅μ λ² ν¨μλ‘ μΈ μ μλ€λ κ²λλ€. μ λλ μ΄ν°λ λ°μ΄ν°κ° λ€μ΄μ¬ λκΉμ§ κΈ°λ€λ Έλ€κ°, λ°μ΄ν°κ° μ λ¬ λμ΄μΌ μ²λ¦¬λκ² λ©λλ€. μμμ λλ€:
μ΄ λΆλΆμ ν° μ°¨μ΄μ μ μ΄μ μμ μ²λΌ yield [value]
ννλ‘ μμ±νμ§ μμλ€λ κ±°μ£ . κ·Έ λμ second
λΌλ λ³μμ κ°μ ν λΉνκ³ yieldμ κ°μ λ¬Έμμ΄ First!
κ° λ©λλ€. μ΄κ²μ next
λ©μλκ° μ²μ νΈμΆλλ©΄ λ겨λ°μ κ°μ΄κ² μ£ .
next
λ©μλλ₯Ό μ²μ νΈμΆ νμ λ μ΄λ€ μΌμ΄ μΌμ΄λλμ§ λ³΄μμ£ .
첫 λ²μ§Έ λΌμΈμμ yield
λ₯Ό λ§λκ³ , First!
κ°μ λ겨 λ°μ΅λλ€. κ·Έλ¬λ©΄, λ³μ second
μ κ°μ λκΉμ?
μ€μ λ‘ κ·Έ κ°μ μ°λ¦¬κ° λ€μ λ²μ νΈμΆν next
λ©μλμ μ λ¬νλ κ°μ
λλ€! μ΄λ² νμ°¨μ λ¬Έμμ΄ 'I like JavaScript'
λ₯Ό μ λ¬ν΄λ³΄κ² μ΅λλ€.
μ¬κΈ°μμ next
λ©μλμ 첫 λ²μ§Έ νΈμΆμ΄ μμ§ μ
λ ₯κ°μ κΈ°μ΅νμ§ μκ³ μλ€λ λΆλΆμ΄ μ€μν©λλ€. 첫 λ²μ§Έ νμ°¨μ νΈμΆμ ν΅ν΄ κ°λ¨νκ² μ΅μ λ²λ₯Ό μμν μ μκ² λ©λλ€. μ λλ μ΄ν°λ κ³μ μ§ννκΈ° μ μ μ
λ ₯μ κΈ°λ€λ Έλ€κ°, next
λ©μλλ‘ μ λ¬λλ κ°μ μ²λ¦¬ν©λλ€.
κ·ΈλΌ μ μ λλ μ΄ν° ν¨μλ₯Ό μ¬μ©νλ €κ³ νλμ?
μ λλ μ΄ν°μ κ°μ₯ ν° μ΄μ μ€ νλλ μ§μ° νκ°(lazily evaluate)κ° λλ€λ μ μ
λλ€. μ΄ λ§μ next
λ©μλμ νΈμΆ μ΄ν λ°νλ°λ κ°μ΄ μ¬μ©μμ νΉμ ν μμ² μ΄νμλ§ μ°μ°μ΄ λλ€λ κ²λλ€! μΌλ°μ μΈ ν¨μλ μ΄λ μ§ μμ£ : λμ€μ κ°μ΄ μ¬μ©λμ΄μΌ ν κ²½μ°μ λλΉνμ¬ λͺ¨λ κ°λ€μ΄ μμ±λ©λλ€.
λͺ κ°μ§ λ€λ₯Έ μ¬μ© μμλ€μ΄ μμ§λ§, μ λ λ³΄ν΅ μμ£Ό ν° λ°μ΄ν°μ μ μνν λ λ λ§μ μ μ΄ λ°©λ²μ μ»κΈ° μν΄ μ΄κ±Έ μ¬μ©ν©λλ€!
λΆν΄λ½μ λͺ©λ‘μ΄ μλ€κ³ κ°μ ν΄λ³΄μ£ ! π μμ λ₯Ό κ°λ¨νκ² νκΈ° μν΄ νλμ κ±°λν μ½λ λΈλμ΄ μλλΌ κ° λΆν΄λ½μ νλμ λ©€λ²λ§ κ°λλ€κ³ νκ² μ΅λλ€. λ©€λ²λ νμ¬ λͺ κ°μ§μ μ±
μ μ½κ³ μκ³ κ·Έ μ±
λ€μ books
λ°°μ΄μμ ννλ©λλ€!
μ΄μ idκ° ev812
μΈ μ±
μ μ°Ύμ΅λλ€. κ·Έκ±Έ μ°ΎκΈ° μν΄ μ°λ¦¬λ 머리μμΌλ‘ μ€μ²©λ for-loopλ forEach
κ°μ ν¬νΌλ₯Ό λ μ¬λ¦¬κ² μ§λ§, κ·Έ λ§μ μ°λ¦¬κ° μ°Ύλ νμ λ©€λ²λ₯Ό μ°Ύμ λ€μλ λ°μ΄ν°λ₯Ό κ³μ λ°λ³΅νλ€λ κ²μ μλ―Έν©λλ€!
μ λλ μ΄ν°μ λλΌμ΄ μ μ μ°λ¦¬κ° μ§μνμ§ μλ ν κ³μ μ€νλμ§ μλλ€λ μ μ΄μ£ . μ΄ λ§μ μ°λ¦¬κ° λ°νλ μμλ₯Ό νκ°ν μ μκ³ λ§μ½ κ·Έκ²μ΄ μ°λ¦¬κ° μ°Ύλ μμλΌλ©΄, μ°λ¦° next
λ₯Ό νΈμΆνμ§ μμΌλ©΄ λλκ²λλ€! μ½λλ₯Ό 보λλ‘ νκ² μ΅λλ€.
λ¨Όμ , κ° ν λ©€λ²μ books
λ°°μ΄μ λ°λ³΅νλ μ λλ μ΄ν°λ₯Ό λ§λ€λλ‘ νκ² μ΅λλ€. ν λ©€λ²μ books
λ°°μ΄μ ν¨μμ μ λ¬νκ³ , κ·Έ λ°°μ΄μ μννκ³ κ°κ°μ μ±
μ λ겨μ€λλ€!
μλ²½νλ€μ! μ΄μ clubMembers
λ°°μ΄μ μννλ μ λλ μ΄ν°λ₯Ό λ§λ€μ΄μΌ ν©λλ€. μ°λ¦° ν΄λ½ λ©€λ² κ·Έ μ체μ λν΄ μ κ²½μΈ νμκ° μκ³ , κ·Έλ€μ μ±
λ€λ§ μννλ©΄ λ©λλ€. iterateMembers
λ μ λλ μ΄ν°μμ κ·Έλ€μ μ±
μ λ겨λ°κΈ° μν΄ iterateBooks
μ΄ν°λ μ΄ν°λ₯Ό μμν©μλ€!
κ±°μ λλ¬μ΄μ! λ§μ§λ§ λ¨κ³λ λΆν΄λ½μ μννλ κ²μ
λλ€. μ΄μ μμ μ κ°μ΄ λΆν΄λ½ μ체μ λν΄ μ κ²½μΈ κ±΄ μκ³ , ν΄λ½ λ©€λ²λ§(νΉν κ·Έλ€μ μ±
μ) νμΈνλ©΄ λ©λλ€. μ΄μ iterateClubMembers
μ΄ν°λ μ΄ν°λ₯Ό μμνκ³ clubMembers
λ°°μ΄μ μ λ¬ν©μλ€.
μ΄λ° λͺ¨λ κ²λ€μ μννκΈ° μνμ¬ bookClub
λ°°μ΄μ iterateBookClubs
μ λλ μ΄ν°μ μ λ¬ν¨μΌλ‘μ¨ μνν μ μλ μ λλ μ΄ν° κ°μ²΄λ₯Ό μ»μ΄μΌ ν©λλ€. μ΄λ²μλ μ΄ν°λ μ΄ν°λΌλ μλ―Έλ‘ μ λλ μ΄ν° κ°μ²΄λ₯Ό it
λΌκ³ νκ² μ΅λλ€.
idκ° ev812
μΈ μ±
μ μ°Ύμ λκΉμ§ next
λ©μλλ₯Ό νΈμΆν΄λ³΄μ£ .
λλ€μ! μ°λ¦¬λ μ°λ¦¬κ° μ°Ύλ μ±
μ μ°ΎκΈ° μνμ¬ λͺ¨λ λ°μ΄ν°λ₯Ό μννμ§ μμλ λ©λλ€. κ·Έ λμ μ°λ¦¬μ μμ²μ λ°λΌ λ°μ΄ν°λ₯Ό μ°Ύλκ±°μ£ ! μλμΌλ‘ λ§€λ² next
λ©μλλ₯Ό νΈμΆνλ κ²μ ν¨μ¨μ μ΄μ§κ° μμΌλβ¦κ·Έ λμ ν¨μλ₯Ό λ§λ€μ΄λ³΄μ£ !
ν¨μμ μ°λ¦¬κ° μ°Ύμ μ±
μ λν idλ₯Ό id
μ μ λ¬νλλ‘ ν©λλ€. λ§μ½ value.id
κ° μ°λ¦¬κ° μ°Ύλ κ²μ΄λΌλ©΄ κ°λ¨νκ² μ 체 value
λ₯Ό(μ±
μ λν κ°μ²΄)λ₯Ό λ°ννλ©΄ λκ³ , κ·Έκ² μλλΌ id
κ° λ§μ§ μμ μ next
λ₯Ό κ³μ νΈμΆνλ©΄ λ©λλ€!
λ¬Όλ‘ μ΄κ±΄ μμ£Ό μμ λ°μ΄ν°μ
μ΄μ§λ§, κ΅μ₯ν λ§μ μμ λ°μ΄ν°λ₯Ό λ€λ£¬λ€κ³ μκ°ν΄λ³΄μΈμ. νΉμ λ± νλμ κ°λ§ μ°ΎκΈ° μν΄ μ°λ¦¬κ° λΆμν΄μΌν μ€νΈλ¦Όμ΄ μλ€κ±°λμ. λ³΄ν΅ μ°λ¦¬λ λΆμμ μμνκΈ° μν΄ λ°μ΄ν°μ
μ μ²΄κ° μ€λΉλ λκΉμ§ κΈ°λ€λ €μΌνμ£ . μ λλ μ΄ν° ν¨μλΌλ©΄ μ°λ¦° κ°λ¨νκ² λ°μ΄ν°μ μμ λ©μ΄λ¦¬λ§ μμ²νκ³ , λ°μ΄ν°λ₯Ό νμΈνκ³ , next
λ©μλλ₯Ό νΈμΆν λλ§ κ°μ΄ μμ±λκ² ν μ μμ΅λλ€!
βλλ체 μ΄κ² λμΌβ λΌκ³ μκ°μ΄ λλλΌλ κ±±μ λ§μΈμ. μ λλ μ΄ν° ν¨μλ μ¬λ¬λΆλ€ μ€μ€λ‘κ° νμ€ν μ¬μ© μμ λ₯Ό κ°κ³ μ¬μ©ν΄λ³Ό λκΉμ§ κ½€ ν·κ°λ¦΄κ±°μμ! μ½κ°μ΄λλ§ μ΄ν΄κ° κ°μ ¨κΈΈ λ°λΌκ³ λ κ·Έλ λ―: μ§λ¬Έμ΄ μμΌμλ©΄ μΈμ λ μ°λ½μ£ΌμΈμ! π