본문 바로가기

DesignPattern

디자인 패턴

1. 디자인 패턴 영역

Purpose
  생성패턴 구조 패턴 행동 패턴
Scope Class Factory Method Adapter Interpreter
Template Method
Object
Abstract Factory
Builder
Prototype
Singleton



Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memonto
Observer
State
Strategy
Visitor

 

1) 생성 패턴

  • 객체의 생성 과정에 관여하는 것
  • 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴
  • 생성 “클래스” 패턴은 객체를 생성하는 책임의 일부를 서브클래스가 담당하도록 넘긴다. 그러나 생성 “객체” 패턴은 이를 다른 객체에게 위임한다.  

2) 구조 패턴

  • 더 큰 구조를 형성하기 위해 어떻게 클래스와 객체를 합성하는가와 관련된 패턴이다.
  • 클래스나 객체의 합성에 관한 패턴
  • 구조 “클래스” 패턴은 상속을 이용해서 클래스를 복합하고, 구조 “객체” 패턴은 객체를 합성하는 방법을 정의한다. 

3) 행동 패턴

  • 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의
  • 어떤 처리의 책임을 어느 객체에 할당하는 것이 좋은지, 알고리즘을 어느 객체에 정의하는 것이 좋은지 등을 다룬다.
  • 행동 “클래스” 패턴은 상속을 이용해서 알고리즘과 제어 흐름을 기술하고, 행동 “객체” 패턴은 하나의 작업을 수행하기 위해 객체 집합이 어떻게 협력하는지를 기술한다.

 

2. Creational Patterns

1) Abstract Factory 

: 구체적인 클래스를  지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴이다.

: 다른 객체를 생성하는 책임만 있는 객체를 만들어 낸다.

 

2) Builder

: 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.

: 다른 객체를 생성하는 책임만 있는 객체를 만들어 낸다.

 

3) Factory Method

: 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브클래스 쪽에서 내리는 패턴이다. 팩토리 메서드 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브클래스로 미룬다.

 

4) Prototype

: 생성할 객체의 종류를 명세하는 데에 원형이 되는 예시 물을 이용하고, 그 원형을 복사함으로써 새로운 객체를 생성하는 패턴이다.

 

5) Singleton

: 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴이다.

 

3. Structural Patterns

1) Adapter(부가 기구)

: 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다.

 

2) Bridge

: 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.

 

3) Composite(복합체, 합성물)

: 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다.

 

4) Decorator

: 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브 클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.

 

5) Façade

: 서브시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴으로, 서브시스템을 좀 더 사용하기 편하게 만드는 상위 수준의 인터페이스를 정의한다.

: 서브시스템을 어떻게 객체로 표현할 수 있는지를 설명한다.

 

6) Flyweight

: 크기가 작은 객체가 여러 개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴이다.

: 규모는 작지만 개수는 많은 객체를 다루는 방법을 설명한다.

 

7) Proxy(대리인)

: 어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자(surrogate) 또는 자리 채움자(placeholder)를 제공하는 패턴이다.

 

4. Behavioral Patterns

1) Chain of Responsibility

: 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여 요청을 보내는 객체와 그 요청을 받는 객체 사이의 결합을 피하는 패턴이다. 요청을 받을 수 있는 객체를 연쇄적으로 묶고, 실제 요청을 처리할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달한다.

 

2) Command

: 요청을 객체의 형태로 캡슐화하여 서로 요청이 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 그리고 연산의 취소를 지원하게 만드는 패턴이다.

: 요청을 자신이 처리하는 것이 아니라, 다른 객체나 객체 집합이 요청을 처리하여 구현하도록 책임지는 객체를 만들어낸다.

 

3) Interpreter

: 주어진 언어에 대해, 그 언어의 문법을 위한 표현 수단을 정의하고, 이와 아울러 그 표현 수단을 사용하여 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴이다.

 

4) Iterator

: 내부 표현부를 노출하지 않고 어떤 객체 집합에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공하는 패턴이다.

 

5) Mediator

: 한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴이다. 객체들이 직접 서로를 참조하지 않도록 함으로써 객체들 사이의 소결합(loose coupling)을 촉진시키며, 개발자가 객체들의 상호작용을 독립적으로 다양화시킬 수 있게 만든다.

 

6) Memento (기념품, 유품, 추억거리)

: 캡슐화를 위배하지 않은 채로 어떤 객체의 내부 상태를 잡아내고 실체화시켜, 이후에 해당 객체가 그 상태로 되돌아올 수 있도록 하는 패턴이다.

: 객체의 내부 상태를 어떻게 저장하고 캡슐화해야 하는지를 정의함으로써 객체가 나중에 그 상태로 복구할 수 있는 방법을 알려준다.

 

7) Observer

: 객체들 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 만드는 패턴이다.

 

8) State

: 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게끔 허가하는 패턴으로, 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보인다.

 

9) Strategy

: 동일 계열의 알고리즘 군을 정의하고, 각각의 알고리즘을 캡슐화하여, 이들을 상호 교환이 가능하도록 만드는 패턴이다. 알고리즘을 사용하는 사용자와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다.

 

10) Template Method

: 객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스 쪽으로 미루는 패턴이다. 알고리즘의 구조 자체는 그대로 놔둔 채 알고리즘 각 단계의 처리를 서브클래스에서 재정의할 수 있게 한다.

 

11) Visitor

: 객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴으로, 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할 수 있게 한다.

: 요청을 자신이 처리하는 것이 아니라, 다른 객체나 객체 집합이 요청을 처리하여 구현하도록 책임지는 객체를 만들어낸다.

 

'DesignPattern' 카테고리의 다른 글

Builder pattern  (0) 2022.04.23