본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

책임 연쇄 패턴(Chain of Responsibility Pattern)은 요청을 처리할 수 있는 객체들을 사슬처럼 이어 두고, 요청을 받은 객체가 직접 처리하거나 다음 객체로 넘기게 해서 요청을 보내는 쪽과 처리하는 쪽의 결합을 끊는 GoF 행위 패턴이다.

GoF 는 이 패턴의 의도를 "요청을 보내는 객체와 받는 객체를 분리해, 하나 이상의 객체가 그 요청을 처리할 기회를 갖게 한다. 받는 객체들을 사슬로 엮고 어느 객체가 처리할 때까지 요청을 사슬을 따라 넘긴다"로 적는다.[1] 보내는 쪽은 누가 처리할지 모른 채 사슬의 첫 객체에 요청을 던지기만 하면 된다. 사슬의 구성은 실행 중에도 바꿀 수 있다.

역할 설명
Handler 요청 처리 메서드와 다음 처리자(successor) 참조를 정의하는 인터페이스
ConcreteHandler 자기가 처리할 수 있는 요청은 처리하고, 아니면 다음 처리자에게 넘긴다
Client 사슬의 첫 처리자에게 요청을 보낸다
  1. Client 가 첫 Handler 에 요청을 보낸다.
  2. 각 Handler 는 자기 조건에 맞으면 처리하고 끝내거나, 처리한 뒤에도 다음으로 넘기거나, 처리하지 않고 바로 넘긴다.
  3. 사슬 끝까지 아무도 처리하지 않으면 요청은 처리되지 않은 채 끝날 수 있다. 이 점은 단점이자 설계 때 정해 둘 부분이다.
  • 서블릿 필터 - Java 서블릿의 FilterChain 은 요청이 자원에 이르기 전에 거치는 필터들의 사슬이다. 각 필터는 doFilter 로 다음 필터를 부르고, 마지막 필터 다음에는 실제 자원이 호출된다.[2]
  • GUI 에서 도움말·이벤트 요청을 자식 위젯에서 부모 위젯으로 차례로 올려 보내는 처리
  • 결재 금액에 따라 팀장 → 부서장 → 임원으로 넘어가는 승인 처리
  • 로그 수준별 로거 사슬, 미들웨어 파이프라인
  • 장점 - 보내는 쪽이 처리자를 몰라도 되므로 결합도가 낮다. 처리자를 추가·제거·재배열하기 쉽다.
  • 단점 - 처리 보장이 없다. 사슬이 길면 디버깅과 성능 추적이 어렵다.

다른 행위 패턴과 구별하기

편집 원본 편집
패턴 요청·이벤트의 흐름 받는 쪽
책임 연쇄 사슬을 따라 하나씩 차례로 넘긴다 보통 처리하는 하나(또는 몇 개)
옵서버 상태가 바뀐 주체가 등록된 관찰자 모두에게 동시에 통보한다 등록된 전부
커맨드 요청을 객체로 감싸 저장·취소·재실행한다 정해진 수신자
전략 알고리즘을 바꿔 끼운다. 요청을 넘기지 않는다 선택된 전략 하나

MVC 패턴을 이루는 고전적 패턴은 옵서버, 전략, 컴포지트이다. 책임 연쇄는 MVC 의 구성 패턴이 아니다.

  1. ↑ 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).
  2. ↑ 「Interface FilterChain」, Java EE 7 API, Oracle, https://docs.oracle.com/javaee/7/api/javax/servlet/FilterChain.html, 확인일: 2026-11-04.