디자인 패턴이란 많은 실무 프로그래머들이 인정한 효율적인 코딩방법 or 구조 라고 보시면 됩니다.

[정의]

[효율적인 코딩방법] 이란,

1. 코드가 명확하고 단순

2. 모듈(Class or Function 등)은 한 가지 기능만 하도록 세분화

3. 재사용성이 높음

4. 유지보수가 쉬움

5. 리소스의 낭비가 없거나, 최소화


라고 볼 수 있습니다.

이러한 효율적인 코드를 만들기 위한 "방법론"으로써, 디자인 패턴을 익혀야 합니다.

디자인 패턴은 외우는 것이 아니라, 직접 코드에 적용해보며 익혀감으로써 차후 여러 상황에 대하여 어떤 패턴을 적용 시킬것인가에 대한 판단 및 적용을 할 줄 아는 능력을 기르는 것이 중요하다고 생각합니다.


패턴의 종류도 많고, 상세한 부분은 추후 함께 다루도록 하겠으며 아래에서는 패턴의 대표적인 종류와 간단한 설명을 하도록 하겠습니다.


(1) 패턴의 분류

1. 목적(Purpose)에 따른 구분 : 디자인 패턴은 목적에 따라서 '생성 패턴', '구조 패턴', '행동 패턴' 으로 나눌 수 있습니다.

1) 생성패턴(Creation Pattern) : 객체의 생성과정에 관여하는 패턴입니다.

- 싱글톤(Singleton) 패턴 : 클래스의 인스턴스가 하나임을 보장하고 접근할 수 있는 전역적인 접근점을 제공하는 패턴으로, 디자인 패턴의 가장 기초라 할 수 있습니다.

- 추상팩토리(Abstract Factory) 패턴 : 구체적인 클래스를 지정하지 않고 관련성이 있거나, 독립적인 객체들을 생성하기 위한 인터페이스를 제공하는 패턴입니다.

- 빌더(Builder) 패턴 : 복학 객체의 생성과정과 표현과정을 분리시켜 동일한 생성과정에서 다양한 표현을 생성할 수 있는 패턴입니다.

- 팩토리 메서드(Factory Method) 패턴 : 객체를 생성하는 인터페이스를 정의하지만, 인스턴스를 만드는 클래스는 서브클래스에서 결정하도록 하는 패턴입니다. 팩토리 메서드에서는 인스턴스를 만드는 것을 서브 클래스에서 하게 됩니다.

- 원형(Prototype) 패턴 : 생성할 객체의 종류를 명시하는 데 원형이 되는 예시물을 이용하고 새로운 객체를 이 원형들을 복사함으로써 생성하는 패턴입니다.


2) 구조패턴(Structral Pattern) : 클래스나 객체의 합성에 관한 패턴입니다.

- 적응자 패턴(Adapter or Wrapper) : 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해주는 패턴입니다.

- 브리지 패턴(Bridge) : 구현부에 추상층을 분리하여 각자 독립적으로 변형할 수 있도록 하는 패턴입니다.

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

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

- Facade 패턴 : 서브시스템에 있는 인터페이스 집합에 통합된 하나의 인터페이스를 제공합니다. 서브시스템을 좀 더 쉽게 사용하기 위해 고수준의 인터페이스를 정의합니다.

- Proxy 패턴 : 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 매니저 또는 자리 채움자를 제공하는 패턴입니다.


3) 행동패턴(Behavioral Pattern) : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴입니다.

- Chain of Responsibility 패턴 : 요청을 처리하는 기회를 하나 이상의 객체에 부여하여 요청을 보내는 쪽과 받는 쪽의 결합을 피하는 패턴입니다. 요청을 받는 객체를 연쇄적으로 묶고 객체를 처리할 수 있을 때까지 요청을 전달합니다.

- 커맨드(Command) 패턴 : 요청을 객체로 캡슐화하여 서로 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 연산의 취소를 지원하게 만드는 패턴입니다.

- 인터프리터 (Interpreter) 패턴 : 주어진 언어에 대해서 문법을 위한 표현수단을 정의하고, 해당 언어로 된 문장을 해석하는 해석기를 사용하는 패턴입니다.

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

- Mediator 패턴 : 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴입니다. 중재자는 객체들이 직접 서로 참조하지 않도록함으로써 객체들간의 느슨한 연결을 촉진시키며 객체들의 상호작용을 독립적으로 다양화 시킬 수 있도록 해줍니다.

- 옵저버(Observer) 패턴 : 객체들 사이에 1 : N  의 의존관계를 정의하여 어떤 객체의 상태가 변할 때, 의존관계에 있는 모든 객체들이 통지받고 자동으로 갱신될 수 있게 만드는 패턴입니다.

- 상태(State) 패턴 : 객체의 내부 상태가 변경될 때 행동을 변경하도록 허락합니다. 객체는 자신의 클래스가 변경되는 것처럼 보이게 됩니다.

- 스트레이트지(Strategy) 패턴 : 동일 계열의 알고리즘들을 정의하고, 각각 캡슐화하며 이들을 상호교환 가능하도록 만드는 것입니다. 알고리즘을 사용하는 사용자로부터 독립적으로 알고리즘이 변경될 수 있도록 하는 패턴입니다.

- 템플릿(Template) 패턴 : 객체의 연산에서 알고리즘의 뼈대만 정의하고, 나머지는 서브클래스에서 이루어지게 하는 패턴입니다. 템플릿패턴은 알고리즘의 구조는 변경하지 않고 알고리즘의 각 단계를 서브클래스에서 재정의하게 됩니다.

- 비지터(Visitor) 패턴 : 객체구조를 이루는 원소에 대해 수행할 연산을 표현합니다. 방문자는 연산에 적용할 원소의 클래스를 변경하지 않고 새로운 연산을 재정의 할 수 있습니다.

'Design Pattern' 카테고리의 다른 글

팩토리 패턴(Factory Pattern)  (0) 2016.07.18
싱글톤패턴(singleton Pattern)  (0) 2016.04.24
디자인 패턴(Design Pattern)의 목적?  (0) 2016.04.24

WRITTEN BY
SiriusJ

,