포스트

디자인 패턴 로드맵

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개 패턴이 이 블로그에서 모두 최소 한 문단씩 설명된다 — 이름만 있고 설명 없는 칸은 없다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.