객체 사이의 책임 분배와 대화 방식을 정리하는 패턴들. 요청 전달, 알고리즘 교체, 상태 변화, 알림, 작업 캡슐화 같은 문제를 다룬다.
- 전략 패턴: 교체 가능한 알고리즘을 객체(또는 함수)로 뺀다
- 옵저버 패턴: 상태 변화를 구독자들에게 알린다
- 커맨드 패턴: 요청을 실행 가능한 객체로 포장한다
- 상태 패턴: 현재 상태 객체가 행동을 결정한다
- 템플릿 메서드 패턴: 알고리즘 뼈대는 고정하고 일부 단계만 바꾼다
- 책임 연쇄 패턴: 처리자를 사슬로 이어 요청을 넘긴다
- 이터레이터(Iterator): 내부 구조를 숨기고 순회 방법만 제공한다. 지금은 대부분 언어의 반복 프로토콜이 이 역할을 한다(이터레이터와 제너레이터)
- 중재자(Mediator): 여러 컴포넌트가 서로 직접 대화하지 않고 중재자를 거치게 해 얽힘을 푼다(대화상자의 입력·버튼·체크박스 조율). 중재자가 모든 규칙을 흡수해 거대해지지 않게 한다. 공통 부모가 자식들의 상태를 들고 조율하는 React의 상태 끌어올리기(Lifting State Up)도 비슷한 모양이다
- 메멘토(Memento): 캡슐화를 깨지 않고 상태 스냅샷을 저장해 되돌리기를 구현한다. 큰 객체라면 변경분만 저장하거나 기록 수를 제한한다
- 방문자(Visitor): 여러 타입의 객체 구조에 새 연산을 자주 더해야 할 때, 연산을 구조 밖의 방문자 객체에 모은다(AST에 출력·타입 검사·코드 생성 추가). 대신 요소 타입이 늘면 모든 방문자를 고쳐야 한다
조건문이 타입이나 상태를 반복 검사한다면 state·strategy·다형성을, 작업을 저장·취소·재실행해야 한다면 command를 먼저 검토한다.