π Contents
- λμμΈ ν¨ν΄μ κ°λ κ³Ό μ’ λ₯
- Singleton ν¨ν΄
- Strategy ν¨ν΄
- Template Method ν¨ν΄
- Factory Method ν¨ν΄
- MVC1 ν¨ν΄κ³Ό MVC2 ν¨ν΄
λμμΈ ν¨ν΄μ΄λ
- μννΈμ¨μ΄λ₯Ό μ€κ³ν λ νΉμ λ§₯λ½μμ μμ£Ό λ°μνλ κ³ μ§μ μΈ λ¬Έμ λ€μ΄ λ λ°μνμ λ μ¬μ¬μ©ν ν μμλ νλ₯ν ν΄κ²°μ±
- "λ°ν΄λ₯Ό λ€μ λ°λͺ νμ§ λ§λΌ(Don't reinvent the wheel)"
- μ΄λ―Έ λ§λ€μ΄μ Έμ μ λλ κ²μ μ²μλΆν° λ€μ λ§λ€ νμκ° μλ€λ μλ―Έμ΄λ€.
- ν¨ν΄μ΄λ
- κ°κΈ° λ€λ₯Έ μννΈμ¨μ΄ λͺ¨λμ΄λ κΈ°λ₯μ κ°μ§ λ€μν μμ© μννΈμ¨μ΄ μμ€ν λ€μ κ°λ°ν λλ μλ‘ κ°μ 곡ν΅λλ μ€κ³ λ¬Έμ κ° μ‘΄μ¬νλ©° μ΄λ₯Ό μ²λ¦¬νλ ν΄κ²°μ± μ¬μ΄μλ 곡ν΅μ μ΄ μλ€. μ΄λ¬ν μ μ¬μ μ ν¨ν΄μ΄λΌ νλ€.
- ν¨ν΄μ 곡ν΅μ μΈμ΄λ₯Ό λ§λ€μ΄μ£Όλ©° νμ μ¬μ΄μ μμ¬ μν΅μ μννκ² ν΄μ£Όλ μμ£Ό μ€μν μν μ νλ€.
λμμΈ ν¨ν΄μ μ’ λ₯
- GoF λμμΈ ν¨ν΄
- GoF(Gang of Four)λΌ λΆλ¦¬λ μ¬λλ€
- μ리ν κ°λ§(Erich Gamma), 리차λ ν¬λ¦(Richard Helm), λν μ‘΄μ¨(Ralph Johnson), μ‘΄ λΈλ¦¬μλμ€(John Vissides)
- μννΈμ¨μ΄ κ°λ° μμμμ λμμΈ ν¨ν΄μ ꡬ체ννκ³ μ²΄κ³νν μ¬λλ€
- 23κ°μ§μ λμμΈ ν¨ν΄μ μ 리νκ³ κ°κ°μ λμμΈ ν¨ν΄μ μμ±(Creational), ꡬ쑰(Structural), νμ(Behavioral) 3κ°μ§λ‘ λΆλ₯νλ€.
- GoF(Gang of Four)λΌ λΆλ¦¬λ μ¬λλ€
GoF λμμΈ ν¨ν΄μ λΆλ₯
- μμ±(Creational) ν¨ν΄
- κ°μ²΄ μμ±μ κ΄λ ¨λ ν¨ν΄
- κ°μ²΄μ μμ±κ³Ό μ‘°ν©μ μΊ‘μνν΄ νΉμ κ°μ²΄κ° μμ±λκ±°λ λ³κ²½λμ΄λ νλ‘κ·Έλ¨ κ΅¬μ‘°μ μν₯μ ν¬κ² λ°μ§ μλλ‘ μ μ°μ±μ μ 곡νλ€.
- ꡬ쑰(Structural) ν¨ν΄
- ν΄λμ€λ κ°μ²΄λ₯Ό μ‘°ν©ν΄ λ ν° κ΅¬μ‘°λ₯Ό λ§λλ ν¨ν΄
- μλ₯Ό λ€μ΄ μλ‘ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μ§λ 2κ°μ κ°μ²΄λ₯Ό λ¬Άμ΄ λ¨μΌ μΈν°νμ΄μ€λ₯Ό μ 곡νκ±°λ κ°μ²΄λ€μ μλ‘ λ¬Άμ΄ μλ‘μ΄ κΈ°λ₯μ μ 곡νλ ν¨ν΄μ΄λ€.
- νμ(Behavioral)
- κ°μ²΄λ ν΄λμ€ μ¬μ΄μ μκ³ λ¦¬μ¦μ΄λ μ± μ λΆλ°°μ κ΄λ ¨λ ν¨ν΄
- ν κ°μ²΄κ° νΌμ μνν μ μλ μμ μ μ¬λ¬ κ°μ κ°μ²΄λ‘ μ΄λ»κ² λΆλ°°νλμ§, λ κ·Έλ κ² νλ©΄μλ κ°μ²΄ μ¬μ΄μ κ²°ν©λλ₯Ό μ΅μννλ κ²μ μ€μ μ λλ€.
- κ°λ
- μ μ λ³μλ₯Ό μ¬μ©νμ§ μκ³ κ°μ²΄λ₯Ό νλλ§ μμ± νλλ‘ νλ©°, μμ±λ κ°μ²΄λ₯Ό μ΄λμμλ μ§ μ°Έμ‘°ν μ μλλ‘ νλ ν¨ν΄
- 'μμ±(Creational) ν¨ν΄'μ νλ
-
- μν μ΄ μννλ μμ
- Singleton
- νλμ μΈμ€ν΄μ€λ§μ μμ±νλ μ± μμ΄ μμΌλ©° getInstance λ©μλλ₯Ό ν΅ν΄ λͺ¨λ ν΄λΌμ΄μΈνΈμκ² λμΌν μΈμ€ν΄μ€λ₯Ό λ°ννλ μμ μ μννλ€.
- Singleton
- μμ
- νλ¦°ν° κ΄λ¦¬μ λ§λ€κΈ°
- κ°λ
- νμλ₯Ό ν΄λμ€λ‘ μΊ‘μνν΄ λμ μΌλ‘ νμλ₯Ό μμ λ‘κ² λ°κΏ μ μκ² ν΄μ£Όλ ν¨ν΄
- κ°μ λ¬Έμ λ₯Ό ν΄κ²°νλ μ¬λ¬ μκ³ λ¦¬μ¦μ΄ ν΄λμ€λ³λ‘ μΊ‘μνλμ΄ μκ³ μ΄λ€μ΄ νμν λ κ΅μ²΄ν μ μλλ‘ ν¨μΌλ‘μ¨ λμΌν λ¬Έμ λ₯Ό λ€λ₯Έ μκ³ λ¦¬μ¦μΌλ‘ ν΄κ²°ν μ μκ² νλ λμμΈ ν¨ν΄
- 'νμ(Behavioral) ν¨ν΄'μ νλ
- μ¦, μ λ΅μ μ½κ² λ°κΏ μ μλλ‘ ν΄μ£Όλ λμμΈ ν¨ν΄μ΄λ€.
- μ λ΅μ΄λ
- μ΄λ€ λͺ©μ μ λ¬μ±νκΈ° μν΄ μΌμ μννλ λ°©μ, λΉμ¦λμ€ κ·μΉ, λ¬Έμ λ₯Ό ν΄κ²°νλ μκ³ λ¦¬μ¦ λ±
- μ λ΅μ΄λ
- νΉν κ²μ νλ‘κ·Έλλ°μμ κ²μ μΊλ¦ν°κ° μμ μ΄ μ²ν μν©μ λ°λΌ 곡격μ΄λ νλνλ λ°©μμ λ°κΎΈκ³ μΆμ λ μ€νΈλν°μ§ ν¨ν΄μ λ§€μ° μ μ©νλ€.
- νμλ₯Ό ν΄λμ€λ‘ μΊ‘μνν΄ λμ μΌλ‘ νμλ₯Ό μμ λ‘κ² λ°κΏ μ μκ² ν΄μ£Όλ ν¨ν΄
-
- μν μ΄ μννλ μμ
- Strategy
- μΈν°νμ΄μ€λ μΆμ ν΄λμ€λ‘ μΈλΆμμ λμΌν λ°©μμΌλ‘ μκ³ λ¦¬μ¦μ νΈμΆνλ λ°©λ²μ λͺ μ
- ConcreteStrategy
- μ€νΈλν°μ§ ν¨ν΄μμ λͺ μν μκ³ λ¦¬μ¦μ μ€μ λ‘ κ΅¬νν ν΄λμ€
- Context
- μ€νΈλν°μ§ ν¨ν΄μ μ΄μ©νλ μν μ μννλ€.
- νμμ λ°λΌ λμ μΌλ‘ ꡬ체μ μΈ μ λ΅μ λ°κΏ μ μλλ‘ setter λ©μλ('μ§μ½ κ΄κ³')λ₯Ό μ 곡νλ€.
- Strategy
- μμ
- λ‘λ΄ λ§λ€κΈ°
- κ°λ
- μ΄λ€ μμ
μ μ²λ¦¬νλ μΌλΆλΆμ μλΈ ν΄λμ€λ‘ μΊ‘μνν΄ μ 체 μΌμ μννλ ꡬ쑰λ λ°κΎΈμ§ μμΌλ©΄μ νΉμ λ¨κ³μμ μννλ λ΄μμ λ°κΎΈλ ν¨ν΄
- μ¦, μ 체μ μΌλ‘λ λμΌνλ©΄μ λΆλΆμ μΌλ‘λ λ€λ₯Έ ꡬ문μΌλ‘ ꡬμ±λ λ©μλμ μ½λ μ€λ³΅μ μ΅μν ν λ μ μ©νλ€.
- λ€λ₯Έ κ΄μ μμ 보면 λμΌν κΈ°λ₯μ μμ ν΄λμ€μμ μ μνλ©΄μ νμ₯/λ³νκ° νμν λΆλΆλ§ μλΈ ν΄λμ€μμ ꡬνν μ μλλ‘ νλ€.
- μλ₯Ό λ€μ΄, μ 체μ μΈ μκ³ λ¦¬μ¦μ μμ ν΄λμ€μμ ꡬννλ©΄μ λ€λ₯Έ λΆλΆμ νμ ν΄λμ€μμ ꡬνν μ μλλ‘ ν¨μΌλ‘μ¨ μ 체μ μΈ μκ³ λ¦¬μ¦ μ½λλ₯Ό μ¬μ¬μ©νλ λ° μ μ©νλλ‘ νλ€.
- 'νμ(Behavioral) ν¨ν΄'μ νλ
- μ΄λ€ μμ
μ μ²λ¦¬νλ μΌλΆλΆμ μλΈ ν΄λμ€λ‘ μΊ‘μνν΄ μ 체 μΌμ μννλ ꡬ쑰λ λ°κΎΈμ§ μμΌλ©΄μ νΉμ λ¨κ³μμ μννλ λ΄μμ λ°κΎΈλ ν¨ν΄
-
- μν μ΄ μννλ μμ
- AbstractClass
- ν νλ¦Ώ λ©μλλ₯Ό μ μνλ ν΄λμ€
- νμ ν΄λμ€μ κ³΅ν΅ μκ³ λ¦¬μ¦μ μ μνκ³ νμ ν΄λμ€μμ ꡬνλ κΈ°λ₯μ primitive λ©μλ λλ hook λ©μλλ‘ μ μνλ ν΄λμ€
- ConcreteClass
- λ¬Όλ €λ°μ primitive λ©μλ λλ hook λ©μλλ₯Ό ꡬννλ ν΄λμ€
- μμ ν΄λμ€μ ꡬνλ ν νλ¦Ώ λ©μλμ μΌλ°μ μΈ μκ³ λ¦¬μ¦μμ νμ ν΄λμ€μ μ ν©νκ² primitive λ©μλλ hook λ©μλλ₯Ό μ€λ²λΌμ΄λνλ ν΄λμ€
- AbstractClass
- μμ
- μ¬λ¬ νμ¬μ λͺ¨ν° μ§μνκΈ°
- κ°λ
- κ°μ²΄ μμ± μ²λ¦¬λ₯Ό μλΈ ν΄λμ€λ‘ λΆλ¦¬ ν΄ μ²λ¦¬νλλ‘ μΊ‘μννλ ν¨ν΄
- μ¦, κ°μ²΄μ μμ± μ½λλ₯Ό λ³λμ ν΄λμ€/λ©μλλ‘ λΆλ¦¬ν¨μΌλ‘μ¨ κ°μ²΄ μμ±μ λ³νμ λλΉνλ λ° μ μ©νλ€.
- νΉμ κΈ°λ₯μ ꡬνμ κ°λ³ ν΄λμ€λ₯Ό ν΅ν΄ μ 곡λλ κ²μ΄ λ°λμ§ν μ€κ³λ€.
- κΈ°λ₯μ λ³κ²½μ΄λ μν©μ λ°λ₯Έ κΈ°λ₯μ μ νμ ν΄λΉ κ°μ²΄λ₯Ό μμ±νλ μ½λμ λ³κ²½μ μ΄λνλ€.
- μν©μ λ°λΌ μ μ ν κ°μ²΄λ₯Ό μμ±νλ μ½λλ μμ£Ό μ€λ³΅λ μ μλ€.
- κ°μ²΄ μμ± λ°©μμ λ³νλ ν΄λΉλλ λͺ¨λ μ½λ λΆλΆμ λ³κ²½ν΄μΌ νλ λ¬Έμ κ° λ°μνλ€.
- μ€νΈλν°μ§ ν¨ν΄, μ±κΈν΄ ν¨ν΄, ν νλ¦Ώ λ©μλ ν¨ν΄μ μ¬μ©νλ€.
- 'μμ±(Creational) ν¨ν΄'μ νλ
- κ°μ²΄ μμ± μ²λ¦¬λ₯Ό μλΈ ν΄λμ€λ‘ λΆλ¦¬ ν΄ μ²λ¦¬νλλ‘ μΊ‘μννλ ν¨ν΄
-
- μν μ΄ μννλ μμ
- Product
- ν©ν 리 λ©μλλ‘ μμ±λ κ°μ²΄μ κ³΅ν΅ μΈν°νμ΄μ€
- ConcreteProduct
- ꡬ체μ μΌλ‘ κ°μ²΄κ° μμ±λλ ν΄λμ€
- Creator
- ν©ν 리 λ©μλλ₯Ό κ°λ ν΄λμ€
- ConcreteCreator
- ν©ν 리 λ©μλλ₯Ό ꡬννλ ν΄λμ€λ‘ ConcreteProduct κ°μ²΄λ₯Ό μμ±
- Product
- ν©ν 리 λ©μλ ν¨ν΄μ κ°λ
κ³Ό μ μ© λ°©λ²
- κ°μ²΄ μμ±μ μ λ΄νλ λ³λμ Factory ν΄λμ€ μ΄μ©
- μ€νΈλν°μ§ ν¨ν΄κ³Ό μ±κΈν΄ ν¨ν΄μ μ΄μ©νλ€.
- ν΄λΉ Postμμλ μ΄ λ°©λ²μ κΈ°μ€μΌλ‘ ν©ν 리 λ©μλ ν¨ν΄μ μ μ©νλ€.
- μμ μ΄μ©: νμ ν΄λμ€μμ μ ν©ν ν΄λμ€μ κ°μ²΄λ₯Ό μμ±
- μ€νΈλν°μ§ ν¨ν΄, μ±κΈν΄ ν¨ν΄κ³Ό ν νλ¦Ώ λ©μλ ν¨ν΄μ μ΄μ©νλ€.
- ν΄λΉ Postμ 맨 νλ¨μ 'λ€λ₯Έ λ°©λ²μΌλ‘ ν©ν 리 λ©μλ ν¨ν΄ μ μ©νκΈ°'λ₯Ό νμΈνλ€.
- κ°μ²΄ μμ±μ μ λ΄νλ λ³λμ Factory ν΄λμ€ μ΄μ©
- μμ
- μ¬λ¬ κ°μ§ λ°©μμ μλ¦¬λ² μ΄ν° μ€μΌμ€λ§ λ°©λ² μ§μνκΈ°
