GoF(Gang of Four) 디자인 패턴
목적에 따른 분류
- 생성 패턴 : 5개
- 구조 패턴 : 7개
- 행위 패턴 : 11개
1. 생성 패턴
- 빌더(Builder)
- 복잡한 인스턴스를 조립
- 생성과 표기를 분리하여 복잡한 인스턴스 생성
- 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 생성
- 팩토리 메소드(Factory Method)
- 상위 클래스에서 인스턴스 정의, 하위 클래스에서 인스턴스 생성
- 추상 팩토리(Abstract Factory)
- 구체적인 클래스에 의존하지 않고, 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공
- 프로토타입(Prototype)
- 일반적인 원형을 만들어놓고, 기존 객체를 복제함으로써 객체를 생성
- 싱글톤(Singleton)
- 전역 변수를 사용하지 않고 객체를 하나만 생성하여, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴
2. 구조 패턴
- 브릿지(Bridge)
- 어댑터(Adapter)
- 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록(재사용할 수 있도록) 중간에서 맞춰주는 역할
- 컴포지트(Composite)
- 데코레이터(Decorator)
- 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
- 기존 코드를 변경하지 않으면서 부가적인 기능을 추가할 수 있는 패턴
- 퍼싸드(Facade)
- 건물의 외관을 바라본 모습을 뜻한다. 즉, 안쪽에 쓰여진 자세한 것을 알지 못한다.
- 복잡한 과정을 숨기고 겉만 보여주는 패턴
- 복잡한 시스템에 대하여 단순한 인터페이스를 제공
- 플라이웨이트(Flyweight)
- 가벼운 이란 뜻
- 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴
- 여러 개의 가상 인스턴스를 제공하여 메모리 절감
- 프록시(Proxy)
- 대리인을 뜻한다.
- 대리 객체를 거쳐 특정 객체에 대한 접근을 제어하거나 기능을 추가하는 패턴
- 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행한다.
3.행위 패턴
- 중재자(Mediator)
- 중재자를 두고 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴
- 여러 객체들 간의 통신을 추상화시켜 객체들 간의 의존성(결합도)을 낮추는 패턴
- 반복자(Iterator)
- 집합 객체의 내부 구조를 노출시키지 않고 순차적으로 접근 가능하게 해주는 패턴
- 커맨드(Command)
- 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 갖는 패턴
- 요청을 캡슐화하여 호출자와 수신자를 분리하는 패턴
- 인터프리터(Interpreter)
- 자주 등장하는 문제를 간단한 언어로 정의하고 재사용하는 패턴
- 문법 자체를 캡슐화하여 사용
- 메멘토(Memento)
- 객체를 이전 상태로 복구시켜야 하는 경우, 작업취소(Undo) 요청 가능
- 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 패턴
- 옵서버(Observer)
- 한 객체의 생태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방법
- 상태(State)
- 객체의 상태에 따라 행위 내용을 변경
- 객체 상태를 캡슐화하여 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경
- 전략(Strategy)
- 여러 알고리즘을 캡슐화하고 상호 교환해서 사용할 수 있게 하는 패턴
- 템플릿 메소드(Template Method)
- 상위 클래스(추상 클래스)에서 기능의 골격을 제공하고 하위 클래스(구체 클래스)에서 세부 처리를 구체화한다.
- 책임 연쇄(Chain of Responsibility)
- 특정한 책임을 가진 클래스들이 서로 연결되어 있는 구조로 무언가를 처리하는 패턴
- 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
- 한 요청을 2개 이상의 객체에서 처리
- 방문자(Visitor)
- 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 디자인 패턴
* 참고