Strategy Pattern(전략패턴)
- 이 패턴은 컨텍스트(context) 개체 코드 내에 있는 많은 조건문들(conditional statements)에 대안을 제공한다. 해당 패턴과 관련된 객체들 내부에 다양한 행위(behavior)들을 캡슐화(encapsulation)함으로써, context 객체가 행위를 바꾸고자 할 때 단지 해당 행위를 수행해주는 객체를 변경하는 방식으로 동작한다.
- Favor composition over inheritance (or Composing Objects Principle)
- 사용/가변성을 생각할 때, interface를 통해 구현하면 object composition으로 delegation이 가능
→ Interchangable한 behavior(알고리즘)를 캡슐화해서 수행할 객체에게 위임(delegation)
- OO Basics: Abstraction, Encapsulation, Polymorphism, Inheritance
Template Method Pattern
- 객체의 연산(operation)에는 알고리즘의 뼈대(skeleton)만을 정의하고, 각 단계에서 수행할 구체적 처리는 서브클래스(subclass)로 미루는 패턴으로, 이 패턴은 알고리즘의 구조 자체는 변하지 않게 유지하면서, 알고리즘 각 단계의 처리를 서브 클래서에서 재정의 할 수 있게 한다.
- 템플릿 메쏘드(Template Method) 패턴은 OCP를 적용한 예이다.
- 팩토리 메쏘드는 이 패턴을 생성 목적으로 적용한 것이라 볼 수 있다.
Iterator pattern (반복자 패턴)
- 기본 표현을 노출하지 않고 Aggregate 객체의 요소에 순차적으로 액세스 할 수 있는 방법을 제공
- SRP (단일 책임의 원칙) 적용
State Pattern (상태패턴)
- Get rid of all of our conditional code and instead delegate to the state object to do the work for us.
→ state object을 캡슐화해서 행동을 위임(delegation)
- state가 바뀔때 마다 사용되는 state 객체가 다르므로, Internal state에 따라 behavior가 다를 수 있다.
- OCP: Open-Closed Principle 적용
Mediator pattern (중재자 패턴)
-글꼴 다이얼로그(Font Dialog)의 구성요소들 간에 M:N의 복잡한 통신 메커니즘(communication mechanism)을 요구한다.
예를 들어 어떤 특정한 글꼴을 콤보박스 (combo box)를 통해 선택하면, 해당 글꼴이 허용하는 글꼴 스타일과 크기 정보를 각각의 리스트 박스에 표시해야 한다. 또한 미리 보기 영역에 선택된 옵션에 따른 글꼴의 모습을 보여주어야 한다.
→ 이런 문제는 구성 요소들끼리 직접 통신을 하기보다는 허브(hub)의 역할을 하는 객체를 두고 이 객체가 구성요소들간 통신 메커니즘을 캡슐화(encapsulation)함으로써 해당 문제를 해결
Factory Method Pattern (팩토리 메쏘드 패턴)
- factory method 패턴에서는 template method 패턴을 사용하여 인스턴스를 생성
( Creator 클래스와 Concrete Creator 클래스 간에 템플릿 메쏘드 패턴이 적용되어 있다)
- Defines an interface for creating an object, but lets subclasses decide which class to instantiate.
- DIP: Dependency Inversion Principle 적용
- Class-scope pattern (uses only inheritance)
Abstract Factory Pattern
- 제품(product)들이 생성(create)되거나 구성(compose), 표현(represent)되는 방식과 무관하게 시스템을 독립적으로 만들고자 한다.
여러 제품군(mutiple families of product)중 하나를 선택해서 시스템을 설정할 수 있다.
제품들에 대한 클래스 라이브러리(class library)를 제공하고, 그들의 구현(implementation)이 아닌 인터페이스(interface)를 노출하고 싶을 때 사용
- 구체적인 클래스를 지정하지 않고 관련되거나 종속된 객체의 패밀리를 작성할 수 있는 인터페이스 제공
- DIP: Dependency Inversion Principle 적용
- Object-scope pattern (use object Composition & delegation)
Builder Pattern
- 복합(complex) 객체의 단계적 생성을 위해 자주 사용되는 생성 패턴이다.
- 추상팩토리(Abstract factory) 패턴의 경우 각 부품이 요청될 때마다 클라이언트에게 즉시 부품을 리턴하는 것과는 달리, 이 패턴을 이용하면 부품이 모두 조립된 완성품을 클라이언트에게 리턴한다.
- Real-life example : RTF reader (TextConverter)
Decorator Pattern
- 구조적(Structural) 패턴의 일종이다.
- 이 패턴의 의도는 기존 클래스의 정의를 수정하지 않고도, 기존 객체에 동적으로 새로운 책임(resposibility)을 동적으로 추가할 수 있게 하는 것이다.
- 어떤 클래스에 새로운 책임을 추가하고자 할 때 상속(inheritance)을 이용하여 서브클래스를 만들어서 해당 책임에 관련된 메쏘드를 추가할 수도 있지만, 이렇게 하면 정적으로된다는 단점이 있다. 이 패턴은 서브클래스를 생성하는 것보다 유연한(flexible) 방법을 제공한다.
Bridge Pattern
- Bridge Pattern은 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있도록 하는 패턴입니다.
즉, 기능과 구현을 별도로 클래스에 정의하여 서로를 분리하는 방법으로 확장 설계에 용이합니다.
- 여러 가지 속성들과 확장 파생되기 쉬운 구조의 이슈는 브릿지 패턴을 이용하여 옵션 종류 증대 및 확장에 대비하는 것이 좋습니다.
- example 1) UIwidget /Icon, checkBox, TextBox의 해상도에 따른 확장
- example 2) Logger와 TextWriter의 변종에 따른 확장
QUIZ) 객체합성 (Object Composition)과 위임 (Delegation)을 통해 동작하는 패턴은?
(O) Strategy Pattern(전략패턴)
(O) State Pattern (상태패턴)
(O) Decorator Pattern(장식자패턴)
(O) Bridge Pattern (브릿지 패턴)
(O) Abstract Factory Pattern
(X) Template Method Pattern (템플릿 메쏘드) => use only inheritance
(X) Factory Method Pattern => use only inheritance
(X) Class Adapter Pattern
본 글은 개인의 S/W 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
'SW 공부 > Design Patterns' 카테고리의 다른 글
[디자인패턴] Design Pattern의 종류와 활용하기 (2) | 2022.08.29 |
---|---|
MVC pattern (2) | 2022.08.29 |
[디자인패턴] Bridge pattern (브릿지 패턴) (2) | 2022.08.28 |
[디자인패턴] Composite Pattern (컴포지트 패턴) (4) | 2022.08.28 |
[디자인패턴] Adapter pattern (어댑터 패턴) (2) | 2022.08.28 |
댓글