티스토리 뷰

Desgin Pattern


- 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인상의 문제를 정리해서 간편하게 적용해서 쓸 수 있는 패턴형태로 만든 것

( 우리가 일상적으로 접하는 문제중 상당수는 다른 많은 개발자들이 이미 접했던 문제이며, 그에 따른 효율적인 해결법이 존재한다 )


디자인 패턴의 원칙

- 코딩이 명확하고 단순해야 한

- 모듈은 한가지 기능만 하도록 작게 세부화 시킬 수 있어야 한다

- 재사용성이 높아야 한다

- 유지보수가 쉬워야 한다

- 리소스의 낭비가 없어야 한다

- 변경되는 부분을 찾아내고 변경되지 않는 부분으로 부터 분리한다

- 상속보다는 구성을 활용한다

- 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다

- 클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다

- 추상화된 것에 의존하도록 만들어라 구상 클래스에 의존하도록 만들지 않도록 한다 



디자인 패턴의 종류

1) 생성 패턴 (Creational Pattern

- 인스턴스를 만드는 절차를 추상화하는 패턴


- 추상 팩토리 패턴(Abstract Factory Pattern)

: 상세화된 서브 클래스를 정의하지 않고도 서로 관련성 있거나 독립적인 여러 객체의 군을 생성하기 위해 인터페이스를 제공


- 빌더 패턴(Builder pattern)

: 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 분리하여 서로 다른 표현 결과를 만들 수 있게하는 패턴


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

: 객체를 생성하는 인터페이스를 미리 정의하고 인스턴스를 만들 클래스의 결정은 서브클래스에서 내림


- 프로토타입 패턴(Prototype Pattern)

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


- 싱글턴 패턴(Singleton Pattern)

: 클래스의 인스턴스가 하나만 생성이 되게 보장하며 전역으로 설정이 되어 어디서든 접근이 가능하도록 제공한다



2) 구조 패턴 (Structural Pattern) 

- 더 큰 구조를 형성하기 위해 어떻게 클래스와 객체를 합성하는 가와 관련된 패턴


- 어댑터 패턴(Adapter Pattern)

: 서로 다른 클래스끼리 함께 동작할 수 있도록 인터페이스를 변환하는 패턴


- 브릿지 패턴(Bridge Pattern)

: 구현에서 추상을 분리하여 이들을 독립적으로 다양성을 가질 수 있도록 하는 패턴


- 컴포지트 패턴(Composite Pattern)

: 각각의 단일 객체와 복합체를 한 종류의 클래스로 설계하여 사용자는 단일 객체든 복합체든 상관없이 다룰 수 있는 편리함을 부여하는 패턴


- 데코레이터 패턴(Decorater Pattern)

: 클래스에게 동적인 기능이나 임무를 추가하는 패턴


- 퍼사드 패턴(Facade Pattern)

: 복잡한 서브 시스템에 대해서 간단한 인터페이스를 제공하는 패턴


- 플라이웨이트 패턴(Flyweight Pattern)

: 크기가 작은 다수의 객체가 있을 때 모두가 갖는 본질적인 요소를 클래스화 하여 공유하므로써 메모리 절감의 효과를 보는 패턴


- 프록시 패턴(Proxy Pattern)

: 실제 객체로 접근을 통제 및 정보은닉을 하기 위해 대리 객체를 제공하는 패턴



3) 행동 패턴 (Behavioral Pattern)


- 책임사슬 패턴(Chain of Responsibility Pattern)

: 요청이 들어 왔을 때 요청을 보내는 객체와 그 요청을 받는 객체 상의 결합을 피하는 패턴


- 커맨드 패턴(Command Pattern)

: 요청을 객체의 형태로 캡슐화 하여 서로 요청이 다른 사용자의 명령을 지원하게 만드는 패턴


- 인터프리터 패턴(Interpreter Pattern)

: 언어의 다양한 해석 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 패턴


- 이터레이터 패턴(Iterator Pattern)

: 컨테이너의 반복에 있어서 일관된 인터페이스를 두어 순차적으로 접근할 수 있는 방법을 제공하는 패턴


- 메디에이터 패턴(Mediator Pattern)

:  한 집합에 속한 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴


- 메멘토 패턴(Memento Pattern)

: 객체의 상태를 관리하여 해당 객체가 이전 상태로 돌아갈 수 있게 하는 패턴


- 옵저버 패턴(Observer Pattern)

: 데이터에 대한 모든 감시자들의 갱신을 자동으로 할 수 있게 하는 패턴


- 스테이트 패턴(State Pattern)

: 상태를 일반적인 데이터 변수로 두지않고 객체로 만들어 그 상태에 따른 행동을 변경할 수 있도록 하는 패턴


- 전략 패턴(Strategy Pattern)

: 비슷한 객체들을 캡슐화하고 교환이 가능하도록 만든 패턴


- 템플릿 메소드 패턴(Template Method Pattern)

: 템플릿을 만들고 서브클래스에서 구체적으로 처리할 수 있도록 하는 패턴


- 방문자 패턴(Visitor Pattern)

: 데이터(또는 객체)의 구조와 처리기능을 분리할 수 있는 패턴




참고자료

GoF_Design_Pattern_Reference_Card.pdf


댓글