디자인 패턴이란 프로그래밍을 할 때에 공통적으로 생기는 문제를 해결하고자 설계한 일정한 코드의 패턴이다. 애플리케이션이나 시스템을 디자인하는 과정에서 자주 발생하는 문제를 해결하는데에 쓰이는 형식화 된 관행이자, 재사용 가능한 해결책이기도 하다.
GoF 디자인 패턴 종류
디자인 패턴에 대해 다루는 유명한 책 중 하나인 ‘GoF의 디자인 패턴’에서 다룬 디자인 패턴의 종류는 다음과 같다.
1. 생성 패턴 (Credential Patterns)
객체 생성과 관련된 패턴이다. 객체의 생성과 조합을 캠슐화하여 특정 객체가 생성되거나 변경되어도 프로그램 구조에 크게 영향을 받지 않도록 유연하게 설계하는 것이 목적이다.
-
싱글톤(Singleton) 패턴
- 클래스의 인스턴스를 오직 한개만 생성하여 제공하는 패턴
-
팩토리 메소드(Factory Method) 패턴
- 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴
-
추상 팩토리(Abstract Factory) 패턴
- 관련있는 여러 객체를 구체적인 클래스에 의존하지 않고 생성할 수 있도록 하는 패턴
-
빌더(Builder) 패턴
- 객체를 만드는 프로세스의 직관성, 유연성을 높이고 독립적으로 분리하는 패턴
-
프로토타입(Prototype) 패턴
- 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 패턴
2. 구조 패턴 (Structural Patterns)
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 객체들을 서로 묶어 단일 인터페이스나 새로운 기능을 제공한다.
-
어댑터(Adapter) 패턴
- 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴
-
브릿지(Bridge) 패턴
- 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴
-
컴포짓(Composite) 패턴
- 그룹 전체와 개별 객체를 동일한 컴포넌트로 취급하여 처리하는 패턴
-
데코레이터(Decorator) 패턴
- 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴
-
퍼사드(Façade) 패턴
- 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화하는 패턴
-
플라이 웨이트(Flyweight) 패턴
- 외적인 속성과 내적인 속성을 분리하고 재사용하여 메모리 사용을 줄이는 패턴
-
프록시(Proxy) 패턴
- 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식을 제공하는 패턴
3. 행위 패턴 (Behavioral Pattern)
객체나 클래스 사이의 알고리즘이나 책임을 분배하는 것에 관련된 패턴이다. 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 분배하고, 객체 사이의 결합도를 최소화하는 것에 중점을 둔다.
-
책임 연쇄(Chain of Responsibility) 패턴
- 요청을 보내는 쪽(sender)과 요청을 처리하는 쪽(receiver)을 분리하는 패턴
-
커맨드(Command) 패턴
- 요청을 캡슐화 하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴
-
인터프리터(Interpreter) 패턴
- 자주 등장하는 문제를 간단한 언어로 정의하고 재사용하는 패턴
-
이터레이터(Iterator) 패턴
- 집합 객체 내부 구조를 노출시키지 않고 순회 하는 방법을 제공하는 패턴
-
중재자(Mediator) 패턴
- 여러 객체들이 소통하는 방법을 캡슐화하는 패턴
-
메멘토(Memento) 패턴
- 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 패턴
-
옵저버(Observer) 패턴
- 다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴
-
상태(State) 패턴
- 객체의 상태에 따라 객체의 행위 내용을 변경해주는 패턴
-
전략(Strategy) 패턴
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
-
템플릿 메소드(Template Method) 패턴
- 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
-
방문자(Visitor) 패턴
- 기존 코드를 변경하지 않고 새로운 기능을 추가하는 패턴