= Design Pattern =
구체적인 구현을 실현하기 위한 사고방식, 해법.
https://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type
{{tag>Architecture Modeling Design_Pattern}}
= 기초 용어 =
[[https://ko.wikipedia.org/wiki/SOLID|SOLID : 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙]]
[[:unified_modeling_language]]
* 상속(Inherit)와 위임(Delegation)
* 상속은 Tight coupling, 위임은 Loose coupling.
* 클래스 관계를 동적으로 바꾸 싶을때, 느슨한 연결(Loose Coupling)을 할 때는 위임. 그 반대의 경우 상속.
* 투과적 인터페이스(API)
* 연쇄적인 상속으로 하위 클래스들에게 API(Method)들이 감추어지지 않고 보이는 것. 상속/구현을 통해 투영/투과.
* [[Adapter Pattern]]
* [[Decorator Pattern]]
* [[Proxy Pattern]]
* Double Dispatch
* 서로 상호적으로 한쌍을 이루어 Method Logic(Algorithm, Message)을 처리하는 관계
* [[Visitor Pattern]]
= 분류 =
기본적으로 Yuki Hiroshi에 의한 분류로 서술.
^ GoF에 따른 분류 ^^^
| Creational | Structural | Behavioral |
== 기초 ==
* [[design pattern:Iterator pattern|Iterator]]
* [[design pattern:Adapter pattern|Adapter]]
== 하위 클래스에게 위임 ==
상속과 관련된 디자인 패턴
* [[design pattern:Template method pattern|Template method]]
* [[design pattern:Factory method pattern|Factory method]]
== 인스턴스 생성 ==
* [[design pattern:Singleton pattern|Singleton]]
* [[design pattern:Prototype pattern|Prototype]]
* [[design pattern:Builder pattern|Builder]]
* [[design pattern:Abstract factory pattern|Abstract factory]]
== 분리해서 생각 ==
복잡하게 뒤섞이기 쉬운 프로그램을 분리해서 생각
* [[design pattern:Bridge pattern|Bridge]]
* [[design pattern:Strategy pattern|Strategy]]
== 동일한 것으로 간주하기 ==
언뜻 보기에 서로 다른 것을 **통일적으로 조작**할 수 있도록 하거나, **취급 방법을 바꾸지 않고** 기능을 추가하는 패턴과 **위임**에 대한 내용
* [[design pattern:Composite pattern|Composite]]
* [[design pattern:Decorator pattern|Decorator]]
== 구조를 돌아다니기 ==
* [[design pattern:Visitor pattern|Visitor]]
* [[design pattern:Chain of responsibility pattern|Chain of responsibility]]
== 단순화 ==
클래스들이 복잡한 관계에 있을 때, 단순하게 만들기
* [[design pattern:Facade pattern|Facade]]
* [[design pattern:Mediator pattern|Mediator]]
== 상태 관리 ==
* [[design pattern:Observer pattern|Observer]]
* [[design pattern:Memento pattern|Memento]]
* [[design pattern:State pattern|State]]
== 낭비 없애기 ==
* [[design pattern:Flyweight pattern|Flyweight]]
* [[design pattern:Proxy pattern|Proxy]]
== 클래스로 표현 ==
명령, 문법규칙과 같은 이외의 것을 클래스로 표현
* [[design pattern:Command pattern|Command]]
* [[design pattern:Interpreter pattern|Interpreter]]