본문으로 바로가기

디자인 패턴 투어 — 생성·구조·행동 9종

싱글톤부터 스트래티지까지 아홉 패턴을 '누가 누구에게 무엇을 하는가'의 관계 다이어그램으로 실행하고, 각 패턴의 실전 서식지를 붙인다.

1 / 11아홉 패턴을 세 갈래로 순례합니다 — 생성(어떻게 만드나: 싱글톤·팩토리·빌더), 구조(어떻게 감싸나: 어댑터·데코레이터·퍼사드·프록시), 행동(어떻게 협력하나: 옵저버·스트래티지). 패턴은 코드가 아니라 '관계의 모양'입니다.
싱글톤팩토리 메서드빌더어댑터데코레이터퍼사드프록시옵저버스트래티지

단계 목록 · 키보드 ←/→ 이동, Space 재생

패턴 암기의 지름길은 '목적 동사' 하나씩이다 — 하나만(싱글톤), 결정 위임(팩토리), 단계 조립(빌더), 변환(어댑터), 추가(데코레이터), 단순화(퍼사드), 통제(프록시), 통지(옵저버), 교체(스트래티지).

왜 헷갈리는가

구조 4형제(어댑터·데코레이터·퍼사드·프록시)가 최대 혼동 지대다 — 넷 다 '무언가를 감싸는' 모양이 같아서다. 가르는 질문: 인터페이스를 바꾸나(어댑터), 기능을 더하나(데코레이터), 여럿을 하나로 가리나(퍼사드), 접근을 통제하나(프록시).

애니메이션이 보여주는 것

아홉 장면 모두 화살표의 방향과 개수가 패턴의 정체다. 싱글톤은 여러 호출자가 한 상자를, 옵저버는 한 주인이 여러 구독자를(그리고 새 구독자가 공짜로 늘어남을), 데코레이터는 같은 인터페이스가 겹겹이 이어지는 사슬을, 스트래티지는 정책 상자만 갈아 끼워지는 것을 보여준다.

각 장면의 실전 줄이 두 번째 요점이다 — 패턴은 발명하는 게 아니라 알아보는 것이다. 이미 쓰고 있는 미들웨어 체인(데코레이터), DOM 이벤트(옵저버), ORM 지연 로딩(프록시), passport.js 전략(스트래티지)이 그것이다.

현대적 주의사항

GoF 이후 30년, 패턴을 다루는 감각도 갱신됐다.

  • 싱글톤은 요주의 — 전역 상태는 테스트·동시성의 적. DI 컨테이너의 스코프 관리가 현대적 대체물이다.
  • 함수형 언어에서는 패턴의 절반이 문법이 된다 — 스트래티지=함수 전달, 데코레이터=고차 함수, 옵저버=스트림(RxJS).
  • 패턴 남용 경보: 구현체가 하나뿐인 인터페이스, 세 단계 팩토리 — 패턴은 문제가 나타난 뒤에 꺼내는 처방이지 출발점이 아니다.
  • 리뷰에서의 쓸모: '여기 분기문이 자라는데 스트래티지로'처럼 패턴 이름은 설계 대화의 압축 어휘로 값을 한다.

기억할 것

  • 패턴 = 관계의 모양. 목적 동사 하나로 외워라(변환·추가·단순화·통제…).
  • 구조 4형제는 '감싸는 목적'으로 가른다 — 어댑터/데코레이터/퍼사드/프록시.
  • 패턴은 발명이 아니라 인식 — 이미 쓰는 라이브러리 속에 다 있다.
  • 문제보다 패턴이 먼저 오면 과설계 — 처방은 증상 뒤에.
디자인 패턴 투어 — 생성·구조·행동 9종 | KIE