GoF 행위 패턴 11가지
🔥 매회 출제 (priority 3)
🌱 왜 배우나
회사에서 부서가 아무리 잘 나뉘어 있어도 “누가 누구에게 어떻게 일을 넘기는가”가 엉망이면 업무가 멈춘다. 프로그램도 마찬가지다. 객체(Object, 데이터와 기능의 묶음) 하나하나가 잘 만들어져 있어도, 서로 일을 나누고 소통하는 방식이 정리되지 않으면 코드가 뒤엉킨다. 행위 패턴(Behavioral Pattern)은 “객체들이 어떻게 일을 나누고 소통할 것인가”에 대한 11가지 검증된 해법이다. 알고리즘(Algorithm, 문제를 푸는 절차) 교체, 이벤트 알림, 상태에 따른 동작 변경 같은 반복 문제를 일관되게 풀 수 있다.
📖 핵심 개념
행위 패턴은 객체나 클래스 사이에서 알고리즘과 책임을 어떻게 나눌지 다루는 패턴이다. GoF(Gang of Four) 3분류 중 수가 가장 많다(11가지). 다루는 주제는 크게 세 가지다.
- 객체끼리 어떻게 소통할 것인가
- 알고리즘을 어떻게 감싸고 교체할 것인가
- 상태 변화와 행동 변경을 어떻게 관리할 것인가
시험 비중이 가장 높은 분류이므로, 각 패턴의 이름과 핵심 목적을 또렷이 구분해 두어야 한다.
🔍 시각화
GoF 행위 패턴 11가지 — 목적별 분류
┌─ 소통 방식 ──────────────────────────────┐
│ Observer : 상태 변화 → 구독자에 자동 알림 │
│ Mediator : 중재자가 객체 간 통신 집중 관리 │
│ Chain of R.: 요청을 처리자 체인으로 전달 │
└──────────────────────────────────────────┘
┌─ 알고리즘 관리 ──────────────────────────┐
│ Strategy : 알고리즘을 교체 가능하게 감쌈 │
│ Template M.: 골격은 고정, 세부만 하위에 위임 │
│ Interpreter: 문법을 클래스로 표현하여 해석 │
└──────────────────────────────────────────┘
┌─ 상태·행동 관리 ─────────────────────────┐
│ State : 내부 상태에 따라 행동 자동 변경 │
│ Command : 요청을 객체화 → 실행취소 가능 │
│ Memento : 상태 스냅샷 저장 → 복원 가능 │
└──────────────────────────────────────────┘
┌─ 순회·연산 분리 ─────────────────────────┐
│ Iterator : 내부 구조 모르고 순차 접근 │
│ Visitor : 구조와 연산 분리 → 새 연산 추가 │
└──────────────────────────────────────────┘
↔️ 이웃 개념 구분
- Strategy vs State: Strategy는 외부(사용자)가 알고리즘을 골라서 바꾼다. State는 객체의 내부 상태가 바뀌면 행동이 알아서 바뀐다. “외부 선택 vs 내부 전이”로 기억하면 쉽다.
- Facade(구조) vs Mediator(행위): 둘 다 통신을 한 곳으로 모으지만, Facade는 단방향(창구가 내부를 감쌈)이고 Mediator는 양방향(중재자가 객체들 사이를 조율)이다. Facade는 구조 패턴이라는 점에 주의.
🔑 핵심 용어
- Observer(옵저버): 한 객체의 상태가 바뀌면, 그를 구독 중인 다른 객체들에 자동으로 알려 준다. 1:N(일대다) 관계. 이벤트 구독 구조.
- Strategy(전략): 알고리즘을 객체로 감싸서, 실행 중에 다른 알고리즘으로 갈아 끼울 수 있게 한다.
- Command(커맨드): 요청(명령)을 객체로 만들어, 실행 취소(Undo)와 재실행(Redo)을 지원한다.
- Iterator(이터레이터): 컬렉션(Collection, 데이터 모음)의 내부 구조를 감춘 채 원소를 순서대로 하나씩 꺼낸다.
- State(상태): 객체의 내부 상태에 따라 행동이 자동으로 달라진다. 상태마다 별도 클래스를 둔다.
- Template Method(템플릿 메서드): 알고리즘의 큰 골격은 상위 클래스에 고정하고, 세부 구현은 하위 클래스에 맡긴다.
- Visitor(방문자): 객체 구조와 연산(처리 로직)을 분리한다. 구조를 건드리지 않고 새 연산을 추가할 수 있다. 이중 디스패치(Double Dispatch) 기법을 쓴다.
- Mediator(중재자): 객체들이 서로 직접 말하지 않고, 중재자 객체를 거쳐 소통한다. 결합도를 크게 줄여 준다.
- Memento(메멘토): 객체의 현재 상태를 스냅샷(사진처럼)으로 떼어 외부에 보관해 두었다가, 나중에 되돌릴 수 있게 한다. Undo 구현의 단골.
- Chain of Responsibility(책임 연쇄): 요청을 처리할 수 있는 객체들을 사슬처럼 이어 두고, 처리할 수 있는 객체를 만날 때까지 순서대로 넘긴다.
- Interpreter(인터프리터): 언어의 문법 규칙을 클래스로 표현하고, 그 규칙에 따라 문장을 해석한다.
✅ 스스로 가르쳐보기
이 내용을 처음 듣는 친구에게 설명한다면, 먼저 “행위 패턴은 네 가지 주제(소통·알고리즘·상태·순회)로 묶을 수 있다”는 큰 그림부터 보여 주세요. 그다음 11가지 패턴을 그 네 묶음에 배치하면서 각각의 목적을 본인의 말로 풀어 보세요.
체크포인트:
- 11가지 패턴 이름을 빠짐없이 나열할 수 있는가?
- Strategy와 State의 차이를 “외부 선택 vs 내부 전이”로 말할 수 있는가?
- Observer의 키워드 “1:N, 자동 통지”를 짚었는가?
- 행위 패턴이 GoF 3분류 중 가장 많다(11개)는 점을 언급했는가?
🎯 기출 포인트
- 빈출 Top 3: Iterator, Observer, Strategy — 거의 매회 출제 수준
- 2024-2회: Iterator 패턴 설명 빈칸 문제
- 구조 패턴 Facade와 혼동 주의 — Facade는 구조, State·Strategy는 행위
- “알고리즘 교체” → Strategy, “상태에 따른 행동 변화” → State