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