[수정중] 헤드퍼스트 디자인 패턴 [13]
헤드퍼스트 디자인 패턴[13]
- 패턴과 함께하는 행복한 삶
패턴: 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다.
컨텍스트: 패턴이 적용되는 상황
문제: 컨텍스트 내에서 이루고자 하는 목적
해결책: 누구든지 적용가능하되, 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인.
GoF Design Patterns를 보면 패턴 카탈로그에 의해 패턴들이 정의되어 있다!
Intent: 패턴 이름
Motivation: 패턴이 만들어지게 된 부분
Applicability: 어디 적용가능한지?
Structure: 구조... 클래스간 관계를 다이어그램으로 표현
Participant: 이 디자인에 포함된 클래스와 객체에 대한 설명
Collaborations: 각 participant 간 패턴내에서 어떻게 서로 도움을 주는지 설명
Consequences: 해당 패턴을 썼을 때의 장점
Implementation/Sample code: 구현방법 및 샘플코드
Known uses: 해당 패턴에 대한 사용 예시
Related Patterns: 해당 패턴과 다른 패턴간 관계
패턴간 분류:
생성 관련 패턴(Creational Pattern): 객체 인스턴스 생성을 위한 패턴. 클라이언트와 그 클라이언트에서 생성해야할 객체 인스턴스 사이의 연결을 끊어주는 패턴.
examples of creational pattern: Singleton, Factory Method, Abstract Factory
+ Prototype, Builder
구조 관련 패턴(Structural Pattern): 클래스 및 객체들을 구성을 통해서 더 큰 구조로 만들 수 있게 해주는 것과 관련된 패턴
examples of structural pattern: Composite, Decorator, Proxy, Façade, Adapter
+ Bridge, Flyweight
행동 관련 패턴(Behavioral Pattern): 클래스와 객체들이 상호작용하는 방법 및 역할을 분담하는 방법과 관련된 패턴
examples of behavioral pattern: Template Method, Command, Iterator, Observer, State, Strategy
+ Mediator, Visitor, Interpreter, Memento, etc.
언제 패턴을 써야될까?
디자인상 오류가 있다싶을 때 사용을 고려해보아야 한다!
- 감이 오면 바로하면 됨. 간단한 해결책으로 감이 안나온다 싶을 때 적용.
- 감이 안오면 패턴 카탈로그의 용도, 적용대상 섹션으로 판단, 디자인 패턴을 적용해봄
문제해결은 단순하게 하는것이 가장 좋다! (Keep it simple stupid!)
디자인 패턴을 적용하는 것은 좋다! 하지만 필요하지 않음에도 적용하는 것은 어리석은 짓이다!
---
안티 패턴? 어떤 문제에 대한 나쁜 해결책에 이르는 길을 일러줌.
안티패턴에서는...
- 어떤 이유로 나쁜 해결책에 유혹될 수 있는지를 알려줌
- 장기적인 관점에서 그 해결책이 나쁜 이유를 알려줌
- 좋은 해결책을 만들기 위해 적용할 수 있는 다른 패턴을 제시함