GoF(Gang of Four) 대자인 패턴
4명의 갱..?이 뭐냐 싶었는데 소프트웨어 설계, 즉 설계 디자인에 템플릿을 제시한 사람들 네명이라고 함.
Erich Gamma, Richard Helm, Ralph Johnson, John Vissides 네명이라는데
어쩌다... 위대한 업적이셔서 이렇게 GoF 라면서 남긴 걸까.... 다른 이름을 붙이지
디자인 패턴의 장점
개발자 간 협업을 원활히 함
소프트웨어 구조를 용이하게 파악할 수 있음
재사용을 통해 개발 시간을 단축
설계 변경이 있을 경우 비교적 조치하기 용이함
단 객체지향적 설계를 고려하여 반영해야 한다.
생성 패턴 | 구조 패턴 | 행동 패턴 |
Abstract Factory Builder Factory Method Prototype Singleton |
Adapter Bridge Composite Decorator Facade Flyweight Proxy |
Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Stratery Template Method Visitor |
생성 패턴
추상 팩토리 Abstract Factory
- 구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 개체들을 묶어줌
빌더 Builder
- 객체의 생성과 표현을 분리하여 객체를 생성
팩토리 메소드 Factory Method
- 객체 생성을 서브클래스로 분리하여 위임 (캡슐화)
프로토타입 Prototype
- 원본 객체를 복사하여 객체를 생성 (클론)
싱글톤 Singleton
- 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조
구조 패턴
어댑터 Adapter
- 클래스의 인터페이스를 어떤 클래스에서든 이용할 수 있도록 변환
브리지 Bridge
- 구현부에서 추상층을 분리하여 각자 독립적으로 변형하고 확장할 수 있도록 함
컴포지트 Composite
- 객체들의 관계를 트리 구조로 구성하여 표현하는 방식으로 복합 객체와 단일 객체를 구분없이 다룸
데코레이터 Decorator
- 주어진 상황에 따라 객체이 다른 객체를 덧붙임
파사드 Facade
- 서브 시스템에 있는 인터페이스 집합에 대해 통합된 인터페이스 제공
플라이웨이트 Flyweight
- 크기가 다른 여러 개의 객체를 매번 생성하지 않고 최대한 공유하여 사용하도록 메모리 절약
프록시 Proxy
- 실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어
행동 패턴
책임 연쇄 Chain of Responsibility- 요청을 받는 객체를 연쇄적으로 묶어 요청을 처리하는 객체를 만날 때까지 객체 Chain을 따라 요청을 전달
커맨드Command
- 요청을 객체의 형태로 캡슐화하여 재사용하거나 취소
인터프리터 Interpreter
- 특정 언어의 문법 표현을 정의
반복자 Iterator
- 컬렉션 구현 방법을 노출하지 않으면서 모든 항목에 접근할 수 있는 방법을 제공
중재자 Mediator
- 한 집합에 속해있는 객체들의 상호작용을 캡슐화하여 새로운 객체로 정의
메멘토 Memento
- 객체가 특정 상태로 다시 되돌아 올 수 있도록 내부 상태를 실체화
옵저버 Observer
- 객체 상태가 변할 때 관련 객체들이 그 변화를 전달받아 자동으로 갱신
상태 State
- 객체의 상태에 따라 동일한 동작을 다르게 처리
전략 Stratery
- 동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호 교환이 가능하게 함
템플릿 메소드 Template Method
- 상위 클래스는 알고리즘의 골격만을 작성하고 구체적인 처리는 서브 클래스로 위임
방문자 Visitor
- 객체의 원소에 대해 행할 연산을 분리하여 별도의 클래스로 구성