책임 연쇄 패턴
IT위키
더 많은 작업
- 상위 문서: 소프트웨어 디자인 패턴
책임 연쇄 패턴(Chain of Responsibility Pattern)은 요청을 처리할 수 있는 객체들을 사슬처럼 이어 두고, 요청을 받은 객체가 직접 처리하거나 다음 객체로 넘기게 해서 요청을 보내는 쪽과 처리하는 쪽의 결합을 끊는 GoF 행위 패턴이다.
GoF 는 이 패턴의 의도를 "요청을 보내는 객체와 받는 객체를 분리해, 하나 이상의 객체가 그 요청을 처리할 기회를 갖게 한다. 받는 객체들을 사슬로 엮고 어느 객체가 처리할 때까지 요청을 사슬을 따라 넘긴다"로 적는다.[1] 보내는 쪽은 누가 처리할지 모른 채 사슬의 첫 객체에 요청을 던지기만 하면 된다. 사슬의 구성은 실행 중에도 바꿀 수 있다.
| 역할 | 설명 |
|---|---|
| Handler | 요청 처리 메서드와 다음 처리자(successor) 참조를 정의하는 인터페이스 |
| ConcreteHandler | 자기가 처리할 수 있는 요청은 처리하고, 아니면 다음 처리자에게 넘긴다 |
| Client | 사슬의 첫 처리자에게 요청을 보낸다 |
- Client 가 첫 Handler 에 요청을 보낸다.
- 각 Handler 는 자기 조건에 맞으면 처리하고 끝내거나, 처리한 뒤에도 다음으로 넘기거나, 처리하지 않고 바로 넘긴다.
- 사슬 끝까지 아무도 처리하지 않으면 요청은 처리되지 않은 채 끝날 수 있다. 이 점은 단점이자 설계 때 정해 둘 부분이다.
- 서블릿 필터 - Java 서블릿의 FilterChain 은 요청이 자원에 이르기 전에 거치는 필터들의 사슬이다. 각 필터는 doFilter 로 다음 필터를 부르고, 마지막 필터 다음에는 실제 자원이 호출된다.[2]
- GUI 에서 도움말·이벤트 요청을 자식 위젯에서 부모 위젯으로 차례로 올려 보내는 처리
- 결재 금액에 따라 팀장 → 부서장 → 임원으로 넘어가는 승인 처리
- 로그 수준별 로거 사슬, 미들웨어 파이프라인
- 장점 - 보내는 쪽이 처리자를 몰라도 되므로 결합도가 낮다. 처리자를 추가·제거·재배열하기 쉽다.
- 단점 - 처리 보장이 없다. 사슬이 길면 디버깅과 성능 추적이 어렵다.
- ↑ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 『Design Patterns: Elements of Reusable Object-Oriented Software』, Addison-Wesley, 1994, ISBN 0-201-63361-2, pp. 223-232(Chain of Responsibility).
- ↑ 「Interface FilterChain」, Java EE 7 API, Oracle, https://docs.oracle.com/javaee/7/api/javax/servlet/FilterChain.html, 확인일: 2026-11-04.