π λμμΈ ν¨ν΄ κ°λ
λμμΈ ν¨ν΄μ λ°λ³΅μ μΌλ‘ λνλλ λ¬Έμ λ€μ ν΄κ²°ν΄ μ¨ μ λ¬Έκ°λ€μ κ²½νμ λͺ¨μμ μ 리ν μΌκ΄λ μ루μ μΌλ‘ μ€κ³μ μ¬μ¬μ©μ ν΅ν΄ μμ°μ± ν₯μμ μν κΈ°λ²μ΄λΌ ν μ μλ€. λν, νλ‘κ·Έλλ¨Έλ€μ΄ μ μ©νλ€κ³ μκ°λλ κ°μ²΄λ€κ°μ μΌλ°μ μΈ μνΈμμ© λ°©λ²λ€μ λͺ¨μ λͺ©λ‘μ΄λΌ ν μ μλ€. λμμΈ ν¨ν΄μ GoF(Gang of Four) μ λΆλ₯κ° λ§μ΄ νμ©λκ³ μμ.
π λμμΈ ν¨ν΄ ꡬμ±
β ν¨ν΄μ΄λ¦ : μ€κ³μ μλλ₯Ό νννλ©° ν λ λ¨μ΄λ‘ μ€κ³λ¬Έμ μ ν΄λ²μ μμ νλ€.
β‘ λ¬Έμ : ν΄κ²°ν΄μΌν λ¬Έμ μ κ·Έ λ°°κ²½μ μ€λͺ νλ©° μΈμ ν¨ν΄μ μ¬μ©νλ μ§λ₯Ό μμ νλ€.
β’ ν΄λ² : μ€κ³μ κ΅¬μ± μμμ κ·Έ μμλ€ κ°μ κ΄κ³, μ± μ, νλ ₯κ΄κ³λ₯Ό μμ νλ€.
β£ κ²°κ³Ό : λμμΈ ν¨ν΄μ μ μ©ν΄μ μ»λ κ²°κ³Όμ μ₯μ /λ¨μ μ μμ νλ€.
π GoF(Gang of Four) λμμΈ ν¨ν΄μ λΆλ₯
1) ν¨ν΄μ΄ μννλ λͺ©μ μ λ°λ₯Έ λΆλ₯
νΉμ± | ν¨ν΄ μ’ λ₯ | |
μμ±ν¨ν΄ | μμ€ν μ΄ μ΄λ€ ꡬ체 ν΄λμ€λ₯Ό μ¬μ©νλμ§μ λν μ 보λ₯Ό μΊ‘μ ννλ€. | Singleton, Factory Method, Abstract Factory, Prototype, Builder ν¨ν΄ |
ꡬ쑰ν¨ν΄ | λ€λ₯Έ κΈ°λ₯μ κ°μ§ κ°μ²΄κ° νλ ₯μ μν΄ μ΄λ ν μν μ μνν λ κ°μ²΄λ₯Ό μ‘°μ§νμν€λ μΌλ°μ μΈ λ°©μμ μ μνλ€. | Decorator, Adaptor, Composite, Facade, Proxy, Bridge, Flyweight ν¨ν΄ |
νμν¨ν΄ | κ°μ²΄μ νμμ λν μ‘°μ§ν, κ΄λ¦¬, μ°ν©μ μ¬μ©νλ€. | Strategy, Observer, State, Command, Iterator, Template, Method, Interprter ν¨ν΄ |
π μμ±ν¨ν΄(Creational Pattern)
μ±κΈν΄ ν¨ν΄(Singleton Pattern)
νΉμ ν΄λμ€μ κ°μ²΄ μΈμ€ν΄μ€κ° νλλ§ λ§λ€μ΄μ§λλ‘ ν΄μ£Όλ ν¨ν΄μ λλ€. μ±κΈν΄ ν¨ν΄μ μ¬μ©νλ©΄ μ μ λ³μλ₯Ό μ¬μ©ν λμ λ§μ°¬κ°μ§λ‘ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ΄λμλ μ§ μ‘μΈμ€ ν μ μκ² λ§λ€ μ μμ΅λλ€. ν΄λμ€ μΈμ€ν΄μ€λ₯Ό νλλ§ λ§λ€κ³ κ·Έ μΈμ€ν΄μ€λ‘μ μ μ μ κ·Όμ μ 곡ν©λλ€.
μΆμ ν©ν 리 ν¨ν΄(Abstract Factory Pattern)
ꡬμ ν΄λμ€μ μμ‘΄νμ§ μκ³ λ μλ‘ μ°κ΄λκ±°λ μμ‘΄μ μΈ κ°μ²΄λ‘ μ΄λ£¨μ΄μ§ μ νκ΅°μ μμ°νλ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. ꡬμ ν΄λμ€λ μλΈ ν΄λμ€μμ λ§λλλ€.
ν©ν 리 λ©μλ ν¨ν΄(Factory method Pattern)
κ°μ²΄λ₯Ό μμ±ν λ νμν μΈν°νμ΄μ€λ₯Ό λ§λλλ€. μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ§λ μλΈν΄λμ€μμ κ²°μ ν©λλ€. ν©ν 리 λ©μλ ν¨ν΄μ μ¬μ©νλ©΄ ν΄λμ€ μΈμ€ν΄μ€ λ§λλ μΌμ μλΈν΄λμ€μκ² λ§‘κΈ°κ² λ©λλ€.
λΉλ ν¨ν΄(Builder Pattern)
μ νμ μ¬λ¬ λ¨κ³λ‘ λλ μ λ§λ€λλ‘ μ ν μμ° λ¨κ³λ₯Ό μΊ‘μννκ³ μΆλ€λ©΄ λΉλ(Builder) ν¨ν΄μ μ¬μ©νλ©΄ λ©λλ€. νΉμ λ°λ³΅μ ν¨ν΄μ μμλμ? κ·Έ ν¨ν΄μ μ¬μ©νλ©΄ λ°λ³΅ μμ μ λ³λμ κ°μ²΄λ‘ μΊ‘μνν΄μ 컬λ μ μ λ΄λΆ ꡬ쑰λ₯Ό ν΄λΌμ΄μΈνΈλ‘λΆν° 보νΈν μ μμ΅λλ€. μ¬κΈ°μμλ λκ°μ μμ΄λμ΄λ₯Ό μ¬μ©ν©λλ€. κ³νν μμ±μ κ°μ²΄(λΉλλΌκ³ λΆλ¦)μ μΊ‘μνν΄μ ν΄λΌμ΄μΈνΈκ° λΉλμκ² κ³νν ꡬ쑰λ₯Ό λ§λ€μ΄ λ¬λΌκ³ μμ²νλλ‘ λ§λλ κ±°μ£ .
νλ‘ν νμ ν¨ν΄(Prototype Pattern)
μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€ λ μμκ³Ό μκ°μ΄ λ§μ΄ λ€κ±°λ 볡μ‘νλ€λ©΄ νλ‘ν νμ (Prototype)ν¨ν΄μ μ°λ©΄ λ©λλ€. νλ‘ν νμ ν¨ν΄μ μ¬μ©νλ©΄ κΈ°μ‘΄ μΈμ€ν΄μ€λ₯Ό 볡μ¬νκΈ°λ§ ν΄λ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€(μλ°μμλ clone() λ©μλλ₯Ό μ¬μ©νκ±°λ μμ§λ ¬νλ₯Ό νλ©΄ λμ£ ). μ΄ ν¨ν΄μ κ°μ₯ λλλ¬μ§ νΉμ§μ ν΄λΌμ΄μΈνΈ μ½λμμ μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λλμ§ μ ν λͺ¨λ₯΄λ μνμμλ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€λ μ μ λλ€.
π νλν¨ν΄(Behavioral Pattern)
ν νλ¦Ώ λ©μλ ν¨ν΄(Template method Pattern)
μκ³ λ¦¬μ¦μ 골격μ μ μν©λλ€. ν νλ¦Ώ λ©μλλ₯Ό μ¬μ©νλ©΄ μκ³ λ¦¬μ¦ μΌλΆ λ¨κ³λ₯Ό μλΈν΄λμ€μμ ꡬνν μ μμΌλ©°, μκ³ λ¦¬μ¦μ ꡬ쑰λ κ·Έλλ‘ μ μ§νλ©΄μ μκ³ λ¦¬μ¦μ νΉμ λ¨κ³λ₯Ό μλΈν΄λμ€μμ μ¬μ μν μλ μμ΅λλ€.
μ±κΈν΄ ν¨ν΄(Singleton Pattern)
μ λ΄μ© λμΌ
μν ν¨ν΄(State Pattern)
μν ν¨ν΄μ μ¬μ©νλ©΄ κ°μ²΄μ λ΄λΆ μνκ° λ°λμ λ°λΌμ κ°μ²΄μ νλμ λ°κΏ μ μμ΅λλ€. λ§μΉ κ°μ²΄μ ν΄λμ€κ° λ°λλ κ²κ³Ό κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
λ°λ³΅μ ν¨ν΄(iterator Pattern)
컬λ μ μ ꡬν λ°©λ²μ λ ΈμΆνμ§ μμΌλ©΄μ μ§ν©μ²΄ λ΄μ λͺ¨λ νλͺ©μ μ κ·Όνλ λ°©λ²μ μ 곡ν©λλ€.
μ λ΅ ν¨ν΄(Strategy Pattern)
μκ³ λ¦¬μ¦κ΅°μ μ μνκ³ μΊ‘μνν΄μ κ°κ°μ μκ³ λ¦¬μ¦κ΅°μ μμ ν΄μ μΈ μ μκ² ν΄ μ€λλ€. μ λ΅ ν¨ν΄μ μ¬μ©νλ©΄ ν΄λΌμ΄μΈνΈλ‘λΆν° μκ³ λ¦¬μ¦μ λΆλ¦¬ν΄μ λ 립μ μΌλ‘ λ³κ²½ν μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄(observer Pattern)
ν κ°μ²΄μ μνκ° λ°λλ©΄ κ·Έ κ°μ²΄μ μμ‘΄νλ λ€λ₯Έ κ°μ²΄μκ² μ°λ½μ΄ κ°κ³ μλμΌλ‘ λ΄μ©μ΄ κ°±μ λλ λ°©μμΌλ‘ μΌλλ€ μμ‘΄μ±μ μ μν©λλ€.
μΈν°νλ¦¬ν° ν¨ν΄(Interpreter Pattern)
μ΄λ€ μΈμ΄μ μΈν°ν리ν°λ₯Ό λ§λ€ λλ μΈν°ν리ν°(Interpreter) ν¨ν΄μ μ¬μ©νλ©΄ λ©λλ€. μΈν°νλ¦¬ν° ν¨ν΄μ λ¬Έλ²κ³Ό ꡬ문μ λ²μνλ μΈν°νλ¦¬ν° ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ κ°λ¨ν μΈμ΄λ₯Ό μ μν©λλ€. μΈμ΄μ μνλ κ·μΉμ λνλ΄λ ν΄λμ€λ₯Ό μ¬μ©ν΄μ μΈμ΄λ₯Ό ννν©λλ€. μ€λ¦¬ μΈμ΄λ₯Ό ν΄λμ€λ‘ νννλ©΄ λ€μκ³Ό κ°μ΅λλ€. λ¬Έλ²κ³Ό μ§μ μ μΌλ‘ λμνλ€λ μ¬μ€μ νμΈν μ μμ΅λλ€.
π ꡬ쑰ν¨ν΄(Stuctural Pattern)
λ°μ½λ μ΄ν° ν¨ν΄(Decorator Pattern)
λ°μ½λ μ΄ν° ν¨ν΄μΌλ‘ κ°μ²΄μ μΆκ° μμλ₯Ό λμ μΌλ‘ λν μ μμ΅λλ€. λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νλ©΄ μλΈν΄λμ€λ₯Ό λ§λ€ λλ³΄λ€ ν¨μ¬ μ μ°νκ² κΈ°λ₯μ νμ₯ν μ μμ΅λλ€.
νλ‘μ ν¨ν΄(Proxy Pattern)
νΉμ κ°μ²΄λ‘μ μ κ·Όμ μ μ΄νλ λ리μΈ(νΉμ κ°μ²΄λ₯Ό λλ³νλ κ°μ²΄)μ μ 곡ν©λλ€.
μ»΄ν¬μ§νΈ ν¨ν΄(Composite Pattern)
μ»΄ν¬μ§νΈ ν¨ν΄μΌλ‘ κ°μ²΄λ₯Ό νΈλ¦¬κ΅¬μ‘°λ‘ ꡬμ±ν΄μ λΆλΆ-μ 체 κ³μΈ΅κ΅¬μ‘°λ₯Ό ꡬνν©λλ€. μ»΄ν¬μ§νΈ ν¨ν΄μ μ¬μ©νλ©΄ ν΄λΌμ΄μΈνΈμμ κ°λ³ κ°μ²΄μ λ³΅ν© κ°μ²΄λ₯Ό λκ°μ λ°©λ²μΌλ‘ λ€λ£° μ μμ΅λλ€.
μ΄λν° ν¨ν΄(Adapter Pattern)
νΉμ ν΄λμ€ μΈν°νμ΄μ€λ₯Ό ν΄λΌμ΄μΈνΈμμ μꡬνλ λ€λ₯Έ μΈν°νμ΄μ€λ‘ λ³νν©λλ€. μΈν°νμ΄μ€κ° νΈνλμ§ μμ κ°μ΄ μΈ μ μμλ ν΄λμ€λ₯Ό μ¬μ©ν μ μκ² λμμ€λλ€.
νΌμ¬λ ν¨ν΄(facade Pattern)
μλΈμμ€ν μ μλ μΌλ ¨μ μΈν°νμ΄μ€λ₯Ό ν΅ν© μΈν°νμ΄μ€λ‘ λ¬Άμ΄μ€λλ€. λν κ³ μμ€ μΈν°νμ΄μ€λ μ μνλ―λ‘ μλΈμμ€ν μ λ νΈλ¦¬νκ² μ¬μ©ν μ μμ΅λλ€.
λΈλ¦¬μ§ ν¨ν΄(Bridge Pattern)
ꡬνκ³Ό λλΆμ΄ μΆμν λΆλΆκΉμ§ λ³κ²½ν΄μΌ νλ€λ©΄ λΈλ¦¬μ§(Bridge) ν¨ν΄μ μ°λ©΄ λ©λλ€. λΈλ¦¬μ§ ν¨ν΄μ μ¬μ©νλ©΄ μΆμνλ λΆλΆκ³Ό ꡬν λΆλΆμ μλ‘ λ€λ₯Έ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ‘ λΆλ¦¬ν΄μ κ·Έ λμ λͺ¨λ λ³κ²½ν μ μμ΅λλ€.
νλΌμ΄μ¨μ΄νΈ ν¨ν΄(Flyweight Pattern)
μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€ νλλ‘ μ¬λ¬ κ°μ ‘κ°μ μΈμ€ν΄μ€’λ₯Ό μ 곡νκ³ μΆλ€λ©΄ νλΌμ΄μ¨μ΄νΈ (Flyweight) ν¨ν΄μ μ¬μ©νλ©΄ λ©λλ€. Tree κ°μ²΄λ₯Ό μ μ² κ° λ§λλ λμ μμ€ν μ μ‘°κΈ κ³ μ³μ Treeμ μΈμ€ν΄μ€λ νλλ§ λ§λ€κ³ λͺ¨λ λ무μ μνλ₯Ό ν΄λΌμ΄μΈνΈ κ°μ²΄κ° κ΄λ¦¬νλλ‘ νλ©΄ μ΄λ¨κΉμ? μ΄κ² λ°λ‘ νλΌμ΄μ¨μ΄νΈ ν¨ν΄μ λλ€.
2) ν¨ν΄μ΄ λ€λ£¨λ μμμ λ°λ₯Έ λΆλ₯
λΆλ₯ | νΉμ± | ν¨ν΄ μ’ λ₯ |
ν΄λμ€ν¨ν΄ | ν΄λμ€ κ° μμ κ΄κ³μ λν μ μλ₯Ό μννλ ν¨ν΄μ΄λ€. κ°μ²΄λ₯Ό μμ±νλ μ± μμ μΌλΆλ₯Ό μλΈ ν΄λμ€κ° λ΄λΉ(μμ)νλ€. | TemplateMethod, Factroymethod, Adapter, Interprter |
κ°μ²΄ν¨ν΄ | κ°μ²΄ μ¬μ΄μ κ΄λ ¨μ±μ λ€λ£¨λ ν¨ν΄μ΄λ€. κ°μ²΄λ₯Ό μμ±νλ μ± μμ μΌλΆλ₯Ό λ€λ₯Έ κ°μ²΄μκ² μμνλ€. | Strategy, Observer, Decorator, Proxy, Composite, Iterator, State |
π MVC(Model View Controller) ν¨ν΄
1) MVC ν¨ν΄ κ°λ
μννΈμ¨μ΄ 곡νμμ μ¬μ©λλ μννΈμ¨μ΄ λμμΈ ν¨ν΄μΌλ‘ μ¬μ©μ μΈν°νμ΄μ€λ‘λΆν° λΉμ¦λμ€ λ‘μ§μ λΆλ¦¬νμ¬ μ ν리μΌμ΄μ μ μκ°μ μμλ κ·Έ μ΄λ©΄μ μ€νλλ λΉμ¦λμ€ λ‘μ§μ μλ‘ μν₯ μμ΄ μ½κ² κ³ μΉ μ μλ μ ν리μΌμ΄μ μ λ§λ€ μ μλ€.
MVCμμ λͺ¨λΈμ μ ν리μΌμ΄μ μ μ 보(λ°μ΄ν°)λ₯Ό λνλ΄λ©°, λ·°λ ν μ€νΈ 체ν¬λ°μ€ νλͺ© λ±κ³Ό κ°μ μ¬μ©μ μΈν°νμ΄μ€ μμλ₯Ό λνλ΄κ³ , 컨νΈλ‘€λ¬λ λ°μ΄ν°μ λΉμ¦λμ€ λ‘μ§ μ¬μ΄μ μνΈλμμ κ΄λ¦¬νλ€.
2) MVC ν¨ν΄ ꡬμ±
- 컨νΈλ‘€λ¬(Controller)λ λͺ¨λΈμ λͺ λ Ήμ 보λμΌλ‘μ¨ λͺ¨λΈμ μνλ₯Ό λ³κ²½ν μ μλ€. (ex. μλ νλ‘μΈμμμ λ¬Έμλ₯Ό νΈμ§νλ κ²) λν, 컨νΈλ‘€λ¬κ° κ΄λ ¨λ λ·°μ λͺ λ Ήμ 보λμΌλ‘μ¨ λͺ¨λΈμ νμλ°©λ²μ λ°κΏ μ μλ€.
- λͺ¨λΈ(Model)μ λͺ¨λΈμ μνμ λ³νκ° μμ λ 컨νΈλ‘€λ¬μ λ·°μ μ΄λ₯Ό ν΅λ³΄νλ€. μ΄μ κ°μ ν΅λ³΄λ₯Ό ν΅ν΄ λ·°λ μ΅μ μ κ²°κ³Όλ₯Ό 보μ¬μ€ μ μκ³ , 컨νΈλ‘€λ¬λ λͺ¨λΈμ λ³νμ λ°λ₯Έ μ μ© κ°λ₯ν λͺ λ Ήμ μΆκ° μ κ±° μμ ν μ μλ€. μ΄λ€ MVC ꡬνμμλ ν΅λ³΄ λμ λ·°λ 컨νΈλ‘€λ¬κ° μ§μ λͺ¨λΈμ μνλ₯Ό μ½μ΄μ€κΈ°λ νλ€.
- λ·°(View)λ μ¬μ©μκ° λ³Ό κ²°κ³Όλ¬Όμ μμ±νκΈ° μν΄ λͺ¨λΈλ‘λΆν° μ 보λ₯Ό μ»μ΄ μ¨λ€.
https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS5781398544
[Design pattern] μμλλ©΄ μ μ©ν 9κ°μ§ GoF λμμΈ ν¨ν΄ μ 리
μν©μ λ°λΌ μ μ©νκ² μ¬μ©ν μ μλ 9κ°μ§ GoF λμμΈ ν¨ν΄μ μκ°ν©λλ€.κ°κ°μ ν¨ν΄μ λν μ€λͺ κ³Ό μ¬μ©λ²μ μ΄ν΄λ³΄κ³ , νμνλ€λ©΄ μ κ·Ήμ μΌλ‘ μ¬μ©ν΄ 보μκΈ° λ°λλλ€.1. λΈλ¦¬μ§ ν¨ν΄(Bridge p
www.hanbit.co.kr