티스토리 뷰

책임 연쇄 패턴

🖌 어떤 요청 사항에 여러개의 책임이 있을 수 있다. 이 상황에서 하나의 객체에 여러 책임을 몰아 넣는 것은 단일 책임 원칙(SRP)에 어긋나는 행동일 수 있기 때문에 책임 연쇄 패턴은 이를 해결하기 위해 요청을 보내는 쪽과 요청을 처리하는 쪽을 분리하여 즉, 요청하는 쪽이 처리하는 쪽을 알지 못하게 숨겨 느슨한 결합(Loose coupling)을 만들고 요청을 처리 하는쪽을 동적으로 추가해 나갈 수 있도록 해주는 디자인 패턴이다.

 

 

객체 모델

 

 

Handler
  • 요청을 처리하는 단일화 된 인터페이스를 통해 후속 처리자와의 연결을 시켜 메시지를 다은 객체에게 전달한다.
public abstract class Handler {
  private Handler nextHandler;
  public Handler(Handler nextHandler) {
    this.nextHandler = nextHandler;
  }

  public void handleRequest(Request request) {
    if (nextHandler != null) {
      nextHandler.handleRequest(request);
    }
  }
}

 

ConcreteHandler
  • 해당 구현체가 담당하는 책임을 구현하고, 다음 후속 처리자를 호출한다.
public class FirstConcreteHandler extends Handler{
  public FirstConcreteHandler(Handler nextHandler) {
    super(nextHandler);
  }

  @Override
  public void handleRequest(Request request) {
		// Logic
    System.out.println(request.getMessage());
    request.setMessage(request.getMessage() + " ~~ ? !");
		// 다음 핸들러 호출
    super.handleRequest(request);
  }
}

 

👍 장점

  • 요청하는 쪽(Sender)에 코드 변경없이 새로운 핸들러를 체인에 동적으로 추가할 수 있다. 즉, OCP 원칙을 지키고 있다.
  • 각각의 체인이 단일 책임 원칙(SRP)을 지키게 할 수 있다.
  • 체인의 구성이 자유롭게 가능하다.

😡 단점

  • 각 책임들간 결합도가 낮고 서로 따로 동작하기 때문에 디버깅이 어렵다.

 

𝌞예제코드

 

GitHub - icraft2170/Blog-Example-Code

Contribute to icraft2170/Blog-Example-Code development by creating an account on GitHub.

github.com

 

 

👉 참조

코딩으로 학습하는 GoF의 디자인 패턴

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

GoF의 디자인 패턴

 

GoF의 디자인 패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소 - 교보문고

▶ 이 책은 디자인 패턴을 다룬 이론서입니다. 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있습니다.

www.kyobobook.co.kr

 

댓글