Module, State Management μμμΌ νλ μ΄μ
μλ°μ€ν¬λ¦½νΈμ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ μΆλ€λ©΄
μλ°μ€ν¬λ¦½νΈλ‘ Moduleλ‘ κ΅¬λΆνμ λ λ°μ΄ν°μ μνκ΄λ¦¬λ₯Ό μΌκ΄λκ² νκ³ μΆλ€λ©΄
μ΄ λ¬Έμλ₯Ό λ³΄κ³ λλ©΄
μλ°μ€ν¬λ¦½νΈλ‘ μ΄ν리μΌμ΄μ
μ λ§λ€ λ λͺ¨λ λ¨μλ‘ λΆλ¦¬ν μ μλ€.
μνκ΄λ¦¬λ₯Ό μν΄ κ°μ₯ μ€μν κ°λ
μΈ μΌκ΄μ±κ³Ό μνμ κ·Ό λ²μμ λν΄ μ΄μΌκΈ°ν΄λ³Ό μ μλ€.
Module
μλ°μ€ν¬λ¦½νΈμμ μ½λλ₯Ό λ‘λν λ "λͺ¨λ κ²μ 곡μ νλ" λ°©μμ κ°μ₯ μλ¬κ° λ°μνκΈ° μ¬μ΄ λΆλΆμ΄κ³ μΈμ΄μ μΌλ‘λ νΌλμ€λ¬μ΄ λΆλΆμ
λλ€. λ€λ₯Έ μΈμ΄λ€μ μ½λμ μ€μ½νλ₯Ό μ μνκΈ° μν΄ ν¨ν€μ§ κ°μ κ°λ
μ κ°κ³ μμ§λ§, ES6 μ΄μ κΉμ§ μλ°μ€ν¬λ¦½νΈ νμΌμ μ μλ μ ν리μΌμ΄μ
μ λͺ¨λ λΆλΆμ νλμ μ μ μ€μ½νλ₯Ό 곡μ νμ΅λλ€. κ·Έλ¦¬κ³ μΉ μ ν리μΌμ΄μ
μ΄ λ³΅μ‘ν΄μ§μλ‘ λ λ§μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ¬μ©νκ² λμκ³ , μ΄λ¬ν λ°©μμ μ΄λ¦ μΆ©λμ΄λ, 보μμ μ°λ €λλ λ¬Έμ λ€μ μΌμΌμΌ°μ΅λλ€. ES6μ λͺ©ν μ€ νλλ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μ΄μκ³ Moduleμ΄ λ±μ₯νμ΅λλ€.
λͺ¨λμ νΉμ κΈ°λ₯μ νλ νλμ μ½λ λ¬Άμ λ¨μμ
λλ€. λͺ¨λμ΄ λͺ¨μ¬ νλμ ν° νλ‘κ·Έλ¨μ΄ λλ©°, λͺ¨λμ λ λ€λ₯Έ λͺ¨λμ μΌλΆλ‘μ κΈ°λ₯μ ν μ μμ΅λλ€. μ΄λ° λͺ¨λμ ν΅μ¬μ "μΊ‘μν" μ
λλ€. λͺ¨λ μμ λͺ¨λ κΈ°λ₯μ λͺ¨λ μμμ λμνλ©°, λͺ¨λ λ°μμλ μ κ·Όμ΄ νμ©λ μμ±μ΄λ λ©μλλ§ μ¬μ©ν μ μλλ‘ νμ©λ©λλ€. ES5κΉμ§λ λͺ¨λμ λν μ§μμ΄ λμ§ μμκΈ° λλ¬Έμ, λͺ¨λκ³Ό λΉμ·ν ꡬ쑰λ₯Ό μ¦μ μ€ν ν¨μλ₯Ό μ΄μ©ν΄ ꡬννμ΅λλ€.
const module = (function() {
const _str = "λͺ¨λ λ³μ"
return {
myfunc: function() {
return _str
}
}
})()
console.log(module.myfunc())
// λͺ¨λ λ³μ
JavaScript
볡μ¬
λ°ν λ°μ κ°μ²΄λ myfunc λ©μλλ₯Ό νΈμΆν μ μκ³ , ν΄λ‘μ μ΄κΈ° λλ¬Έμ _str λ³μμ μ κ·Όν μ μμ΅λλ€. λ°λΌμ module.myfunc()λ₯Ό μ€ννλ©΄ "λͺ¨λ λ³μ" λ¬Έμμ΄μ λ°ν λ°κ² λ©λλ€. λͺ¨λ μΈλΆμμλ _str λ³μμ μ κ·Όν μ μμ΅λλ€.
μ΄λ¬ν λ°©μμΌλ‘ ꡬννλ©° λͺ¨λ ννμ λν λμ¦κ° μλ€ λ³΄λ, κ²°κ΅ ES6μμλ 본격μ μΌλ‘ λͺ¨λμ μ§μνκ² λμμ΅λλ€. (ES6μ λͺ¨λμ΄ λμ€κΈ°κΉμ§ νμ€μ μν μμ§μμ μμΈν μμλ³΄κ³ μΆλ€λ©΄ λ§ν¬λ₯Ό νμΈν΄μ£ΌμΈμ!) ꡬν λ°©λ²μ΄ μ¬ννκ³ λͺ
ννλ―λ‘ κ°λ₯νλ©΄ μμ κ°μ λ°©μ보λ€λ ES6μ μλ‘μ΄ λͺ¨λ μμ± λ°©λ²μ μΆμ²νλλ°μ. ES6μμ μλ‘κ² μ§μνλ λͺ¨λ μμ€ν
μ λ€μμ κ·μΉμ λ°λΌ μμ±ν©λλ€.
λͺ¨λμ νμΌ λ¨μλ‘ κ΅¬μ±νλ κ±Έ κΈ°λ³ΈμΌλ‘ νλ€. νμ§λ§ κ°λ¨ν λ©μλ ννμΈ λͺ¨λλ€μΈ κ²½μ° ν κ°μ νμΌμμ κ΄λ¦¬νκΈ°λ νλ€.
λͺ¨λμ λ³μ, ν¨μ, ν΄λμ€ λ±μ export ν€μλλ‘ λ
ΈμΆνκ³ importλ‘ λ€λ₯Έ λͺ¨λ, νμ΄μ§μμ κ°μ Έμμ μ¬μ©νλ€.
λͺ¨λμ μν μ°Έμ‘°λ₯Ό ν μ μλ€. λͺ¨λ μμ€ν
μ νμ νΈλ¦¬ κ΅¬μ‘°λ‘ λ§¨ μμ μ²μ μ€νλλ λ£¨νΈ νμ΄μ§/λͺ¨λμ΄ μμΌλ©° ν λ°©ν₯μΌλ‘λ§ μ°Έμ‘°ν μ μλ€.
λͺ¨λμ μ΄λ¦μ μ€λ³΅λ μ μλ€. λ°λΌμ κ°μ Έμ€λ(import) μμ μ μ΄λ¦μ μ¬μ μν΄ μΆ©λμ νΌν μ μλ€.
μνλ
νλ‘ νΈμλ νλ‘κ·Έλλ°μ νλ©΄μ μν(state)κ΄λ¦¬λΌλ μ©μ΄λ₯Ό λ§μ΄ μ°λλ°μ. μνλ μ½κ² λ§νλ©΄ 'λ°μ΄ν°' λΌκ³ μκ°νλ©΄ μ’μ κ² κ°μ΅λλ€. μ΄ μν κ΄λ¦¬λ μ΄ν리μΌμ΄μ
μ΄ λ³΅μ‘ν΄μ§μλ‘ μ μ μ΄λ €μμ§λλ€. κ·Έλ κΈ° λλ¬Έμ λ¨μν ꡬ쑰μΌλλΆν° μ΄ μνλ₯Ό μ΄λ»κ² κ΄λ¦¬νλ©΄ μ’μμ§μ λν κ³ λ―Όμ μΆ©λΆν ν΄λ³΄λ κ²μ λ ν° μ΄ν리μΌμ΄μ
μ λ§λ€κΈ° μν κ³Όμ μμ μ€μν©λλ€.
λ¨Όμ μνλ 무μμΌκΉμ? μνκ° μκ³ , μνκ° μλ κ²μ΄ μμν
λ°μ. λμ μ΄λ€ μ°¨μ΄κ° μμκΉμ? μνμμ μ€μν λΆλΆμ λ°λ‘ κ°μ΄ λ³νλ€λ κ²μ
λλ€. μ΄ κ°μ΄ λ³νλλ° μμΈ‘λ κ°μΌλ‘ λ³ν΄μΌ μλνλλ‘ λμμ μνν μ μμΌλ, μμΈ‘ λ²μ μμμ λ³νκ² νλ κ²μ΄ μ€μν©λλ€. κ·Έλμ κ·Έ μμΈ‘λ λ²μλ₯Ό λ§λ€κΈ° μν΄μ, μ¬λ¬κ°μ§ μ μ½μ‘°κ±΄μ΄λ ꡬ쑰μ μΈ μ€κ³λ₯Ό κ³ λ―Όν μ μμ΅λλ€.
μ΄ μμΈ‘ λ²μλ₯Ό μ΅μν νκΈ° μν΄μλ
μνμ λν΄
μΌκ΄λκ² READνλ λ‘μ§κ³Ό,
μ΅μνν Writeνλ λ‘μ§μ λ§λ€ λ κ°λ₯ν΄μ§λλ€.
λ²μλ₯Ό μ΅μννλκ±°λ λͺ¨λ λ¨μ, μ€μ½ν λ¨μμ λν κ³ λ―ΌμΌλ‘ νμ₯λ μ μμ΅λλ€.
μνμ λν μΌκ΄μ±μ μνλ₯Ό μ¬λ¬ κ³³μμ κ°μ λ°©μμΌλ‘ READνλ λ°©μμ κ³ λ―Όν΄λ³Ό μ μμ΅λλ€.
μνλ₯Ό μ¬λ¬ κ³³μμ μ§μ μ μΌλ‘ μμ νλ€λ©΄, μνλ₯Ό μμΈ‘νκ³ κ΄λ¦¬νκΈ° μ΄λ €μ°λ μμ νλ λΆλΆμ μ ννκ³ , κ·Έ μ±
μμ κ°μ§κ³ μλ λμμ΄ λΆλͺ
νκ² μν μ κ°μ§λ€λ©΄ μ΅μνν writeκ° κ°λ₯ν΄μ§ μ μμ΅λλ€.
μμ λ₯Ό ν΅ν΄μ νλ‘ νΈμλμ μν κ΄λ¦¬μ λν΄ μμλ³Όν
λ°μ. μμ£Ό κ°λ¨ν ν¬λ리μ€νΈλ₯Ό ν΅ν΄ μν κ΄λ¦¬μ λν΄ λ€λ€λ³Ό μμ μ
λλ€.
μ TodoList μ±μ TodoItemsλΌλ λ°μ΄ν° κ°μ κ°μ§λλ€. κ·Έλ°λ° μ΄ λ°μ΄ν°λ₯Ό μ¬λ¬κ΅°λ°μμ κ΄λ¦¬νλ€λ©΄ ν κ³³μ λ³νκ° μμ λλ§λ€, λͺ¨λ λ³νλ₯Ό κ°μ§νκ³ λ°μνλ €λ©΄ μ€λ³΅ μ½λλ λ§μμ§κ³ λΆνμν dom μ κ·Ό λν λ§μμ§ μ μμ΅λλ€. κ·Έλ λ€λ©΄ μ΄ λ°μ΄ν°λ₯Ό μ΄λ»κ², μ΄λμ κ΄λ¦¬νλ©΄ μ’μκΉμ?
μ°μ λ°μ΄ν°μ κ΄λ ¨λ λΆλΆλ€μ 체ν¬νκΈ° μν΄ μμ λ¬Έμμμ 보μλ κ²μ²λΌ λ°μ΄ν°λ₯Ό κ°μ§κ³ κ°±μ λμΌ νλ κΈ°μ€μΌλ‘ UIλ₯Ό λΆλ¦¬ν΄λ³΄κ² μ΅λλ€.
λ μΈλΆμ μΌλ‘ λΆλ¦¬ν μ λ μμ§λ§, μ°μ μ μ΄ 4κ°μ§λ‘ λΆλ¦¬ν΄λ³Όκ±΄λ°μ. μμ²λΌ ꡬλΆνκ³ λλ©΄, TodoAppμ΄λΌλ μ»΄ν¬λνΈ μμ TodoInput, TodoList, TodoCount UIλ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
μ΄λ¬ν ꡬ쑰μμ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ£Όκ³ λ°κΈ° μν΄μλ κ³ λ €ν΄μΌν κ²μ 무μμ΄ μμκΉμ? κ·Έλ¦¬κ³ λ°μ΄ν°λ₯Ό 곡μ νκΈ° μν ν¨μ¨μ μΈ λ°©λ²μ 무μμΌκΉμ? λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° μν λ°©λ²λ€μ κ²μν΄λ³΄μ
λ μ’κ³ , μ€μ€λ‘ κ³ λ―Όν λ°©λ²μ μ§μ ꡬνν΄λ΄λ μ’μ κ² κ°μ΅λλ€. μ²μλΆν° μ λ§λ€μ΄μ§ ν¨ν΄λ€μ λ°λ‘ μ¬μ©νκΈ° 보λ€λ μ§μ κ³ λ―Όν΄λ³΄κ³ , ꡬνν΄λ³΄λ κ³Όμ μ΄ μλ€λ©΄ μλ‘μ΄ κΈ°μ κ³Ό λꡬλ€μ λ§λ¬μ λ κ·Έ μλ―Έλ₯Ό λμ± μ μ μ μμ΅λλ€. μ΄λ¬ν λΆλΆμ κ³ λ €ν΄μ λ‘λ λ―Έμ
μ λ°μν΄μ£ΌμΈμ.
μ μμ λ‘ μ°μ΅ν΄λ³΄κ³ μΆλ€λ©΄!
λ§ν¬μμ forkλ°μ μ μμ€μμλΆν° μΆμνμμΌλκ°λ©° μνκ΄λ¦¬λ₯Ό μ°μ΅ν΄λ³Ό μ μμ΅λλ€. λ§μ½ μμ±νκ³ λ λ€μμλ PRμ 보λ΄λ³΄μΈμ! λκ΅°κ°κ° μ¬λ¬λΆμ PRμ 리뷰λ₯Ό λ¨κ²¨μ€κΊΌμμ!
μ 리
μλ°μ€ν¬λ¦½νΈμ μν κ΄λ¦¬λ₯Ό μν΄ μΌκ΄λκ², μνμ λν΄ μ κ·Όν μ μλ λ²μλ₯Ό κ³ λ €ν΄μΌ νλ€.
λ°λ‘ μ μ 리λ λμμΈ ν¨ν΄μ΄λ, λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°Έκ³ ν μλ μμ§λ§ μ€μ€λ‘ κ³ λ―Όν΄λ³΄κ³ μ°Ύμλ³Έλ€λ©΄ κ·Έλ¬ν λꡬλ€μ μ² νμ λ μ μ΄ν΄ν μ μκ³ , κΈ°μ μ νμ©λλ λ λμμ§ μ μλ€.