디자인 패턴 로드맵 — 세 갈래로 나눠 쉬운 것부터 쌓는 순서
GoF 23개 패턴을 생성·구조·행위 세 갈래로 나누고 난이도와 비교하기 좋은 추천 순서를 표시한 학습 지도. 자주 헷갈리는 쌍은 구현 모양이 아니라 의도로 구분하고, 특정 문제에서 선명한 패턴은 부록으로 묶었다.
디자인 패턴을 “23개 이름 외우기”로 접근하면 금방 지친다. 이 로드맵의 목표는 하나 — 패턴을 갈래별로 이해하고, 쉬운 것부터 쌓아 실제로 골라 쓸 수 있게 되는 것이다.
학습 줄기는 두 축이 겹쳐 있다. 큰 갈래는 GoF가 나눈 생성·구조·행위 세 분류이고, 각 글에는 이해 난이도를 표시했습니다. 아래 화살표는 필수 prerequisite가 아니라 구조나 의도를 비교하기 쉬운 추천 순서입니다.
패턴을 익힌 뒤 참고로 꺼내 보는 것들 — 자주 헷갈리는 쌍과 적용 범위가 전문적인 패턴 묶음 — 은 학습 줄기와 결이 다른 부록으로 뒤에 뒀습니다.
한눈에 보기
큰 갈래 셋이 학습 줄기다. 한 단어로 외우면:
| 분류 | 한 단어 | 무엇을 다루나 |
|---|---|---|
| 생성 (Creational) | 만들기 | 객체를 어떻게 만드느냐 — 생성 과정을 캡슐화 |
| 구조 (Structural) | 엮기 | 객체·클래스를 어떻게 조합하느냐 — 더 큰 구조로 |
| 행위 (Behavioral) | 주고받기 | 객체 간 책임 분배와 상호작용 — 알고리즘·흐름 |
각 갈래의 난이도를 참고하고, 아래 학습 순서에서 비교하기 좋은 순서를 잡습니다. GoF 23개를 모두 다루며 Bridge·Flyweight·Interpreter는 묶음 글로 설명합니다.
생성 — 만들기
객체 생성의 책임과 절차를 캡슐화해, 무엇을·어떻게 만드는지를 클라이언트로부터 분리한다.
| 패턴 | 난이도 | 한 줄 요약 |
|---|---|---|
| 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 | 중급 | 내부 상태를 캡슐화한 스냅샷으로 저장·복원한다 |
| Interpreter | 참고 | 문법 규칙을 클래스로 표현해 문장을 해석 (묶음 글) |
학습 순서
각 글의 선행 표기는 필수 prerequisite가 아니라 비교하기 좋은 추천 순서입니다. 먼저 입문 패턴으로 감을 잡고, 구조나 의도가 닮은 패턴을 이어서 비교합니다.
1단계 — 선행 없이 시작 (입문) Strategy · Factory · Decorator · Adapter · Observer · Iterator · Singleton
2단계 — 입문 위에 쌓기
- Strategy → State (상태 vs 알고리즘) · Template Method (상속판 Strategy) · Command (요청을 객체로) — 셋 다 Strategy만 선행이라 나란히 읽어도 된다. 이어서 Command → Memento (상태를 스냅샷으로)
- Decorator → Proxy (감싸기지만 목적이 다름) · Chain of Responsibility (감싸기를 사슬로) — 둘 다 Decorator가 선행인 형제 패턴
- Factory → Builder (생성을 단계로) · Prototype (생성을 복제로)
- Adapter → Facade (변환에서 단순화로)
- Observer → Mediator (브로드캐스트에서 조율로)
- Composite (선행 없는 중급 — 여기서 바로 시작) → Visitor (트리 위에 연산을 얹기)
Iterator·Singleton은 2단계에 없다. 둘은 그 자체로 완결이라 위에 얹는 후속 패턴이 없다 — 1단계에서 감만 잡으면 끝이다(누락이 아니다).
부록 — 자주 헷갈리는 쌍 (다른 축)
학습 단계가 아니라, 닮은 패턴 앞에서 막혔을 때 찾아보는 대조표다. 분류가 다르거나 구조가 닮아 헷갈리기 쉬운 조합을 목적의 차이로 가른다.
| 비교 | 닮은 점 | 가르는 기준 |
|---|---|---|
| Strategy vs State | 둘 다 행위를 객체로 캡슐화 | Strategy는 정책·알고리즘 교체, State는 lifecycle 상태별 행동·전이가 의도 |
| 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는 요청 자체를 캡슐화하고 undo를 선택적으로 제공, Memento는 이전 상태를 캡슐화 |
부록 — 적용 범위가 전문적인 패턴은 모아서
Bridge · Flyweight · Interpreter는 각각 독립 글로 늘리기보다 특정 문제에서 선명한 GoF 패턴 한 글에서 적용 신호와 경계를 비교합니다. 실제 빈도 순위를 주장하는 분류는 아닙니다.
Abstract Factory·Factory Method는 Factory 글에서 함께 다룬다.
경계 — 패턴은 목적이 아니라 도구
패턴을 배우고 나면 모든 문제에 끼워 맞추고 싶어진다. 그게 가장 흔한 함정이다. 이 로드맵은 “언제 쓰나”만큼 “언제 쓰지 말아야 하나”도 중요하게 본다 — 각 패턴 글 끝의 안티패턴 / 주의 섹션이 그 경계선이다. 새 패턴을 도입하기 전에 그 섹션부터 읽어, 지금 문제가 정말 그 패턴을 부르는지 되묻는 습관을 들이자.
특히 Singleton은 자주 쓰이면서도 안티패턴 비판이 큰 대표 사례라, 그 글에서 비판과 DI 대안을 함께 다룬다.
OCP(개방-폐쇄 원칙)는 Strategy·Factory Method·Observer·Chain of Responsibility에서 반복되는 중요한 이점입니다. 하지만 모든 패턴의 근본 목표는 아닙니다. Memento는 캡슐화된 상태 보존, Flyweight는 메모리 절약, Iterator는 순회 은닉처럼 서로 다른 force를 해결합니다. 패턴 이름보다 지금 줄이려는 결합·중복·상태·메모리 문제가 무엇인지를 먼저 잡아야 합니다.
각 갈래의 입문 패턴에서 시작해 학습 순서의 화살표로 중급을 얹고, 닮아서 헷갈리는 쌍은 부록 대조표로 가르면 된다. 이로써 GoF 23개 패턴이 이 블로그에서 모두 최소 한 문단씩 설명된다 — 이름만 있고 설명 없는 칸은 없다.