sat10am - JavaScript Study
@godori
π
Factory
π
π¦
π¦
π¦
곡μ₯μμ μνμ μμ°νλ―μ΄ Β λΉμ·ν κ°μ²΄λ₯Ό μ°μ΄λ΄λ ν¨ν΄
μ κΉ! ν©ν 리 ν¨ν΄κ³Ό κ΄λ ¨μ΄ κΉμ
ν νλ¦Ώ λ©μλ ν¨ν΄ μ λν΄ λ¨Όμ μμλ΄ μλ€.
Template Method Pattern
Abstract
Concrete
μ€μν λΌλ κ²°μ
μΆμ λ©μλμ ꡬνμ νμν΄λμ€μκ² λ§‘κΉ
μμν΄λμ€μμ μμλ°μ μΆμλ©μλμ ꡬ체μ μΈ λ΄μ©μ κ²°μ
μμ ν΄λμ€
νμ ν΄λμ€
νμ ν΄λμ€μμ ꡬν!
NoodleRecipe
makeNoodle()
boilWater()
putNoodle()
Example
NoodleRecipe
Ramen
Bibimmyeon
makeNoodle()
boilWater()
putNoodle()
boilWater()
putNoodle()
addEgg()
boilWater()
putNoodle()
λ©΄κ³Ό λ¬κ±μ κ°μ΄ λ£μ μλ μμ΅λλ€.
Factory Method Pattern
Factory
Product
Framework
create()
create()
makeProduct()
registerProduct()
π¦
create()λ‘ Productλ₯Ό λ§λ€κ³ ,
λ€μ μΆμ λ©μλμ ꡬνμ νμν΄λμ€μμ ν©λλ€
makeProduct()
registerProduct()
Factory
pizzaFactory
Product
pizza
Framework
pizza
π
create
create
π¦
makeProduct()
registerProduct()
selectTopping()
create()
makeProduct()
registerProduct()
νΌμ λ μνΌλ§μ λν μΌ
Factory
chickenFactory
Product
chicken
chicken
Framework
π
π¦
create
create
makeProduct()
registerProduct()
chooseBanBan()
create()
makeProduct()
registerProduct()
μΉν¨ λ μνΌλ§μ λν μΌ
Simple Factory
Factory Method
Abstract Factory
3μ’ λ₯μ κ°λ μ μΈ ν©ν 리 ν¨ν΄
Simple Factory
λ¨μ ν©ν 리 ν¨ν΄μ΄λ
λ€λ₯Έ κ°μ²΄λ₯Ό μμ±νλ κ°μ²΄λ₯Ό μΊ‘μννλ ν¨ν΄μ λλ€.
λ¨μ Factory Pattern λ§μΌλ‘λ κ½€ μΈλ§ν©λλ€.
νμ§λ§ μ’λ μ μ©νκ² λ§λ€ μ μμ΅λλ€!
Factory Method Pattern
ν©ν 리 λ©μλ ν¨ν΄μμλ λ©μλ νλλ₯Ό μ μνκ³ ,
νμν΄λμ€κ° μ΄λ₯Ό μ¬μ μ ν©λλ€.
Abstract Factory Method Pattern
ꡬ체μ μΈ ν΄λμ€μ μμ‘΄νμ§ μκ³
μλ‘ μ°κ΄λκ±°λ μμ‘΄μ μΈ κ°μ²΄λ€μ μ‘°ν©μ λ§λλ
μΈν°νμ΄μ€λ₯Ό μ 곡νλ ν¨ν΄μ λλ€.
κ°κ°μ μ¬λ£λ₯Ό 리ν΄νλ κ°μ²΄
μ¬λ£λ₯Ό μ‘°ν©ν΄μ κ°κ°
μμΉ΄κ³ μ€νμΌκ³Ό
μΊλ¦¬ν¬λμ μ€νμΌμ
λ§λλ ν¨μλ₯Ό μμ±ν©λλ€.
π€
Constructor Functions
vs
Factory Functions
Β
ν·κ°λ €μ!
Constructor Functions
new ν€μλλ₯Ό ν¨μ μμ μ°λ©΄
μ΄ ν¨μλ μμ±μκ° λκ³ , μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄ λ°νν©λλ€.
μμ±μλ‘ λΉ κ°μ²΄λ₯Ό λ¨Όμ λ§λ€κ³ νλ‘νΌν°λ₯Ό ν λΉνλ μ½λ
μμ±μλ₯Ό ν΅ν΄ μ΄κΈ°ν ν μ μ λ₯Ό μμ±νλλ‘ μ½λ 리ν©ν λ§
μ¦, κ°μ²΄λ₯Ό λ§λλ 건 ν¨μμ΄λ©°
μμ±μ(constructor)λ
κ°μ²΄λ₯Ό λ§λλ μν μ νλ ν¨μμ λλ€.
Factory Function
μ¬κΈ°μ μ κΉ
object.assign - μ¬λ¬ κ°μ²΄λ₯Ό ν©μ³μ€λλ€.
mixin - μ½λλ₯Ό μ¬μ¬μ©νκΈ° μν ν¨ν΄ μ€ νλλ‘, μ£Όλ‘ λ€μ€μμμ λμμΌλ‘ μ¬μ©λ©λλ€.
μ¬κΈ°μ μ κΉ 2
Object.assignμ μ¬μ©νλ minxinμ μμ©ν΄μ
ν©ν 리 λ©μλλ₯Ό λ§λ€μ΄λ΄ μλ€.
Animal ν©ν 리 λ©μλλ‘ rabbitμ μμ±ν©λλ€.
κ±·κΈ°λ§ νλκΉ μ¬μ¬νμ£ ?
Animalμ ν΅ν΄ λ§λ€μ΄μ§ λλ¬Όμκ² νΉμ λ₯λ ₯μ μ£Όλ €κ³ ν©λλ€.
νμ§λ§ killλ₯λ ₯μ λΆμ¬νλ €λ©΄
κ° κ°μ²΄λ§λ€ λͺ¨λ assignμ ν΄μ€μΌ ν©λλ€.
Animal ν©ν λ¦¬λ‘ λ§λ€μ΄μ§ tiger κ°μ²΄μκ² Object.assignμ ν΅ν΄ kill λ₯λ ₯μ μ€ μ μμ΅λλ€.
kill λ₯λ ₯μ κ°μ§λ Animalμ KillingAnimal ν©ν λ¦¬λ‘ λ§λ€λ©΄
μνλ λ₯λ ₯μ κ°μ§ λλ¬Όμ κ³μ μμ±ν μ μμ΅λλ€!
ν©ν 리 λ©μλλ
μ΄λ°μμΌλ‘ μμ©ν μλ μμ΅λλ€
κ°μ²΄λ₯Ό μμ±ν΄ λ°ννλ ν©ν 리 λ©μλλ₯Ό λ§λ€λ©΄
newΒ ν€μλ μμ΄λ
μνλ κΈ°λ₯μ κ°μ§ μ κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€.
So, where is Class?