본문 바로가기
SW 공부/Design Patterns

[디자인패턴] 각 패턴의 특징과 핵심 요약

by 꼬냉상 2022. 9. 26.

Strategy Pattern(전략패턴) 

 

[디자인패턴] Strategy Pattern(전략패턴)

Purpose of Strategy Pattern (전략패턴의 목적) - Defines a set of encapsulated algorithms that can be swapped to carry out a specific behavior. - 특정 동작을 수행하기 위해 스왑 할 수 있는 캡슐화..

wisdomtic.cf

-  이 패턴은 컨텍스트(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

 

[디자인패턴] Template method pattern (템플릿 메소드 패턴)

Purpose of Template method Pattern (템플릿 메소드 패턴의 목적) - Identifies the framework of an algorithm, allowing implementing classes to define the actual behavior. - 실제 동작을 정..

wisdomtic.cf

- 객체의 연산(operation)에는 알고리즘의 뼈대(skeleton)만을 정의하고, 각 단계에서 수행할 구체적 처리는 서브클래스(subclass)로 미루는 패턴으로, 이 패턴은 알고리즘의 구조 자체는 변하지 않게 유지하면서, 알고리즘 각 단계의 처리를 서브 클래서에서 재정의 할 수 있게 한다.
- 템플릿 메쏘드(Template Method) 패턴은 OCP를 적용한 예이다.

- 팩토리 메쏘드는 이 패턴을 생성 목적으로 적용한 것이라 볼 수 있다. 


Iterator pattern (반복자 패턴)

 

[디자인패턴] Iterator pattern (반복자 패턴)

Purpose of Iterator Pattern (반복자 패턴의 목적) aka) Cursor - Allows for access to the elements of an aggregate object without allowing access to its underlying representation. -..

wisdomtic.cf

- 기본 표현을 노출하지 않고 Aggregate 객체의 요소에 순차적으로 액세스 할 수 있는 방법을 제공
- SRP (단일 책임의 원칙) 적용



State Pattern (상태패턴)

 

[디자인패턴] State pattern (상태 패턴)

Purpose of State Pattern (상태 패턴의 목적) - Ties object circumstances to its behavior, allowing the object to behave in different ways based upon its internal state. - 내부 상태에 따라 다..

wisdomtic.cf

- 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 (중재자 패턴)

 

[디자인패턴] Mediator pattern (중재자 패턴)

Purpose of Mediator Pattern (중재자 패턴의 목적) - Allows loose coupling by encapsulating the way disparate sets of objects interact and communicate with each other. - 상호 작용하고..

wisdomtic.cf

-글꼴 다이얼로그(Font Dialog)의 구성요소들 간에 M:N의 복잡한 통신 메커니즘(communication mechanism)을 요구한다. 
예를 들어 어떤 특정한 글꼴을 콤보박스 (combo box)를 통해 선택하면, 해당 글꼴이 허용하는 글꼴 스타일과 크기 정보를 각각의 리스트 박스에 표시해야 한다. 또한 미리 보기 영역에 선택된 옵션에 따른 글꼴의 모습을 보여주어야 한다. 

→ 이런 문제는 구성 요소들끼리 직접 통신을 하기보다는 허브(hub)의 역할을 하는 객체를 두고 이 객체가 구성요소들간 통신 메커니즘을 캡슐화(encapsulation)함으로써 해당 문제를 해결


Factory Method Pattern (팩토리 메쏘드 패턴)

 

[디자인패턴] Factory Method Pattern & Abstract Factory Pattern (팩토리 메서드 패턴 & 추상 팩토리 패턴)

Purpose of Creational patterns (생성 패턴의 목적) - Allow to creating new objects without explicitly using the new operator. - 새 연산자를 명시적으로 사용하지 않고 새 개체를 만들 수 있도록..

wisdomtic.cf

- 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

 

[디자인패턴] Factory Method Pattern & Abstract Factory Pattern (팩토리 메서드 패턴 & 추상 팩토리 패턴)

Purpose of Creational patterns (생성 패턴의 목적) - Allow to creating new objects without explicitly using the new operator. - 새 연산자를 명시적으로 사용하지 않고 새 개체를 만들 수 있도록..

wisdomtic.cf

- 제품(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

 

[디자인패턴] Builder pattern (빌더 패턴)

Purpose of Builder Pattern (빌더 패턴의 목적) - Allows for the dynamic creation of objects based upon easily interchangeable algorithms. - 쉽게 교환할 수 있는 알고리즘을 기반으로 개체를..

wisdomtic.cf

- 복합(complex) 객체의 단계적 생성을 위해 자주 사용되는 생성 패턴이다. 
- 추상팩토리(Abstract factory) 패턴의 경우 각 부품이 요청될 때마다 클라이언트에게 즉시 부품을 리턴하는 것과는 달리, 이 패턴을 이용하면 부품이 모두 조립된 완성품을 클라이언트에게 리턴한다.
- Real-life example : RTF reader  (TextConverter)


Decorator Pattern

 

[디자인패턴] Decorator pattern (데코레이터 패턴)

Purpose of Decorator Pattern (데코레이터 패턴의 목적) - Allows for the dynamic wrapping of objects in order to modify their existing responsibilities and behaviors. - 객체를 동적으로 래핑하여..

wisdomtic.cf

- 구조적(Structural) 패턴의 일종이다.
- 이 패턴의 의도는 기존 클래스의 정의를 수정하지 않고도, 기존 객체에 동적으로 새로운 책임(resposibility)을 동적으로 추가할 수 있게 하는 것이다.
- 어떤 클래스에 새로운 책임을 추가하고자 할 때 상속(inheritance)을 이용하여 서브클래스를 만들어서 해당 책임에 관련된 메쏘드를 추가할 수도 있지만, 이렇게 하면 정적으로된다는 단점이 있다. 이 패턴은 서브클래스를 생성하는 것보다 유연한(flexible) 방법을 제공한다. 

 

Bridge Pattern

 

 

[디자인패턴] Bridge pattern (브릿지 패턴)

Purpose of Bridge Pattern (브릿지 패턴의 목적) - Defines an abstract object structure independently of the implementation object structure in order to limit coupling. - 구현 객체와..

wisdomtic.cf

- 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 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
반응형

댓글