디자인 패턴 로드맵
GoF 23개 패턴을 생성·구조·행위 세 갈래로 나눠 한눈에 보는 지도. 이 블로그에 정리한 패턴들의 학습 순서와 자주 헷갈리는 쌍을 한 곳에 모았다.
디자인 패턴은 크게 생성·구조·행위 세 갈래로 나뉜다. 1994년 GoF의 『Design Patterns』가 23개 패턴을 이렇게 분류한 이래 거의 모든 교재가 이 틀을 따른다.
한 줄로 외우면:
| 분류 | 한 단어 | 무엇을 다루나 |
|---|---|---|
| 생성 (Creational) | 만들기 | 객체를 어떻게 만드느냐 — 생성 과정을 캡슐화 |
| 구조 (Structural) | 엮기 | 객체·클래스를 어떻게 조합하느냐 — 더 큰 구조로 |
| 행위 (Behavioral) | 주고받기 | 객체 간 책임 분배와 상호작용 — 알고리즘·흐름 |
이 블로그에 정리한 패턴들을 분류별로 묶었다. GoF 23개를 모두 다룬다 (빈도 낮은 셋은 묶음 글로).
생성 — 만들기
객체 생성의 책임과 절차를 캡슐화해, 무엇을·어떻게 만드는지를 클라이언트로부터 분리한다.
| 패턴 | 난이도 | 한 줄 요약 |
|---|---|---|
| Factory | 입문 | 생성 책임을 팩토리로 옮겨 결합도를 낮춘다. Simple / Factory Method / Abstract Factory |
| Builder | 입문 | 인자·선택 항목이 많은 객체를 단계별로 조립. 텔레스코핑 생성자 대체 |
| Singleton | 입문 | 인스턴스를 하나로 보장하고 전역 접근점 제공. 안티패턴 비판과 DI 대안도 함께 |
| Prototype | 입문 | 견본 객체를 복제해 생성. 생성 비용이 크거나 구체 타입을 숨길 때 |
구조 — 엮기
객체를 감싸거나 합쳐 더 큰 구조를 만든다. 핵심은 위임(composition) 으로 상속의 경직성을 피하는 것.
| 패턴 | 난이도 | 한 줄 요약 |
|---|---|---|
| Adapter | 입문 | 기존 클래스를 원하는 인터페이스로 변환. 모양을 바꿔 끼운다 |
| Decorator | 입문 | 객체를 감싸 기능을 동적으로 덧댄다. 클래스 폭발 없이 조합 |
| Proxy | 중급 | 대리자가 실제 객체 접근을 가로채 제어. 가상/보호/원격 |
| Composite | 중급 | 단일과 묶음을 같은 인터페이스로. 트리 구조의 본체 |
| Facade | 중급 | 복잡한 서브시스템 앞 단순한 진입점. 결합도를 낮춘다 |
| Bridge | 참고 | 추상·구현 두 축을 분리해 클래스 폭발을 막는다 (묶음 글) |
| Flyweight | 참고 | 공통 상태를 공유해 대량 객체의 메모리를 절약 (묶음 글) |
행위 — 주고받기
객체 사이의 책임 분배와 상호작용, 알고리즘의 흐름을 다룬다.
| 패턴 | 난이도 | 한 줄 요약 |
|---|---|---|
| Strategy | 입문 | 알고리즘을 객체로 캡슐화해 런타임에 갈아끼운다 |
| Observer | 입문 | 상태 변화를 구독자들에게 통지하는 일대다 관계 |
| Iterator | 입문 | 내부 구조를 감추고 원소를 순서대로 꺼낸다 |
| State | 중급 | 상태별 분기 대신 상태를 객체로. 동작이 상태 따라 바뀐다 |
| Template Method | 중급 | 상위가 알고리즘 골격, 하위가 빈칸을 채운다 |
| Command | 중급 | 요청을 객체로 캡슐화. 큐잉·로그·취소가 자연스러워진다 |
| Chain of Responsibility | 중급 | 핸들러를 사슬로 연결해 차례로 시도. 미들웨어의 본체 |
| Mediator | 중급 | 객체 간 통신을 중재자 한 곳으로. 다대다 결합을 푼다 |
| Visitor | 중급 | 구조는 그대로 두고 연산을 분리. AST 순회의 본체 |
| Memento | 중급 | 상태를 스냅샷으로 저장해 되돌린다. undo/redo의 본체 |
| Interpreter | 참고 | 문법 규칙을 클래스로 표현해 문장을 해석 (묶음 글) |
학습 순서
각 글의 선행 표기를 따라가면 이런 흐름이 된다. 먼저 선행이 없는 입문 패턴으로 감을 잡고, 그 위에 중급을 얹는다.
1단계 — 선행 없이 시작 (입문) Strategy · Factory · Decorator · Adapter · Observer · Iterator · Singleton
2단계 — 입문 위에 쌓기
- Strategy → State (상태 vs 알고리즘) → Template Method (상속판 Strategy) → Command (요청을 객체로) → Memento (상태를 스냅샷으로)
- Decorator → Proxy (감싸기지만 목적이 다름) → Chain of Responsibility (감싸기를 사슬로)
- Factory → Builder (생성을 단계로) · Prototype (생성을 복제로)
- Adapter → Facade (변환에서 단순화로)
- Observer → Mediator (브로드캐스트에서 조율로)
- Composite → Visitor (트리 위에 연산을 얹기)
자주 헷갈리는 쌍
분류가 다르거나 구조가 닮아 헷갈리기 쉬운 조합. 목적의 차이로 가른다.
| 비교 | 닮은 점 | 가르는 기준 |
|---|---|---|
| Strategy vs State | 둘 다 행위를 객체로 캡슐화 | Strategy는 클라이언트가 고른다, State는 스스로 전이한다 |
| Decorator vs Proxy | 둘 다 같은 인터페이스로 감싼다 | Decorator는 기능 추가, Proxy는 접근 제어 |
| Adapter vs Facade | 둘 다 다른 인터페이스를 앞에 둔다 | Adapter는 모양 변환, Facade는 단순화 |
| Factory Method vs Template Method | 둘 다 하위가 빈칸을 채운다 | 채우는 게 객체 생성이면 Factory Method, 알고리즘 단계면 Template Method |
| Factory vs Prototype | 둘 다 생성을 다룬다 | Factory는 타입으로 새로 생성, Prototype은 기존 인스턴스를 복제 |
| Observer vs Mediator | 둘 다 직접 호출을 끊는다 | Observer는 일대다 브로드캐스트, Mediator는 다대다 조율 |
| Command vs Memento | 둘 다 undo를 푼다 | Command는 역연산으로 되돌림, Memento는 상태 스냅샷으로 복원 |
빈도 낮은 패턴은 모아서
Bridge · Flyweight · Interpreter는 각각 한 페이지를 채울 만큼 할 얘기가 없어 자주 안 쓰는 GoF 패턴 한 글에 모아 짧게 다뤘다. 위 표의 (묶음 글) 표시가 그것.
Abstract Factory·Factory Method는 Factory 글에서 함께 다룬다.
이로써 GoF 23개 패턴이 이 블로그에서 모두 최소 한 문단씩 설명된다 — 이름만 있고 설명 없는 칸은 없다.