[디자인패턴] 책임 체인 패턴

Coffee Time☕·2021년 6월 2일
0

디자인 패턴

목록 보기
2/13

책임 체인 패턴이란?

아직 회사에서 정식으로 일해본 적은 없지만..
잘 짜여진 회사에서는 자신의 역할이 확고하여 맡은 역할을 수행하고 다른 사람에게 넘기고 그 다음 사람은 자신의 일을 하고 또 다른 이에게 넘기며 일을 처리한다고 한다.

이와 같은 패턴이 책임 체인 패턴이다.
책임이 하나의 체인과 같이 연결되어 있어, 자신의 역할을 수행하고, 다음 객체에게 넘기며 일을 수행한다.

  • 필요성
    책임 체인 패턴이 필요한 경우는 언제일까?
    아마 많은 역할이 필요한 큰 작업을 수행하는 경우.
    책임에 대해서 객체 서로에 대해서 알고 있지 못한 경우.
    정도에 사용하면 좋을 것 같다.

책임 체인 패턴을 이용하지 않을 경우, 상태(state)를 체크하여야 하는 단점이 있다.
책임 체인이 아닌 if-else를 이용하여 해당 state에 대해서 처리 해준다면, 클래스간 긴밀하게 연결 되어 있는 상태가 될 것이다. 이러한 결합은 추후에 코드를 수정, 변경에 용이하지 못하다.

책임 체인 패턴 UML 다이어그램과 특징

  • 책임 체인 패턴은 Handler클래스가 존재한다. Handler 클래스는 체인으로 연결된 concreteHandler들을 관리한다. handleRequest 메소드는 다음과 같이 작성될 수 있다.
//concreteHandler의 handleRequest 내부
public void handleRequest(){
	if(this->hasHelp())  //자신이 도울 수 있으면 실행
    	this-> operate(); 
    else //자신의 작업이 아닌 경우 상위 객체에게 넘김
    	successor->handleRequest();
}
  • Handler 클래스는 다음 체인으로 넘어가기 위해서 자기 자신을 참조하는 successor 객체를 가진다. 이는 recursive하게 표현된다.
  • 위 다이어그램에서는 concreteHandler1과 concreteHandler2가 연결되어 있는 형태인 것이다.

책임 체인 패턴의 장점

  • 결합도를 줄일 수 있다. 자신의 책임이 아닌 것은 다른 객체로 넘겨 주는 형태이기 때문에 클라이언트가 내부를 알지 않고도 이용할 수 있다는 점에서 결합도가 줄어든다 .
  • 객체의 책임 배정이 융통적이다. 필요에 따라 체인의 순서를 삽입, 삭제 등 변경 할 수 있다.

0개의 댓글