본문 바로가기
개발 관련 정보/디자인패턴

11.Builder 패턴 / Chain of Responsibility 패턴

by MonoSoft 2023. 4. 4.
728x90
반응형

Builder 패턴  Chain of Responsibility 패턴

 

 

chain of responsibility 패턴

책임들이 연결되어 있어 

내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조를 말한다. 

 

 

이런 구조가 필요한 이유를 먼저 살펴보자. 

예를 들어, 학생이 학교의 한 부서(학생처)에 상담 전화를 걸었다고 생각해보자. 

전화를 받은 사람이 해당 문제는 담당자가 다르다고 

실제 담당자의 전화번호만 가르쳐준다면 전화를 건 학생은 

일단 전화를 끊고 알려준 번호로 다시 전화를 걸어야 한다.

 

그런데 알려준 번호로 전화를했는데 이번에도 담당자가 바뀌었다며 

다른 전화번호를 알려준다면 학생은 담당자와 연결될 때까지 

세 번이나 전화를 걸어야 하므로 매우 불편하고 짜증이 날 것이다. 

 

이와 달리 처음 전화를 걸었을 때 받은 사람이 담당자가 아닐 경우 

전화를 끊지 않고도 담당자에게 돌려주면 매우 편리할 것이다.

 

 

(a) 정적 구조

 

(b) 동적 구조

 

 

소프트웨어 개발에서도 이렇게 자동으로 연결되는 구조로 프로그램을 만들면 

매우 유용한데 이 개념을 적용할 수 있는 것이 바로 chain of responsibility 패턴이다. 

 

학생이 전화했을 때 번호를 가르쳐주고 직접 해보라는 것은

프로그램의 특정 기능에 대한 처리가 개별적으로 하드 코딩되어 있어

연결 변경이 불가능한 구조이다.

 

이는 유연성이 매우 떨어진다.

 

반면, 학생이 전화를 했을 때 알아서 연결해주는 형태는

프로그램이 필요에 따라 동적으로 처리할 수 있는 구조이다. 

 

이 구조는 [그림 5-51]처럼 추상 클래스를 활용하여 설계하고, 

이런 구조를 chain of responsibility 패턴이라고 한다.

 

그림 5-51 chine of responsibility 패턴

 

 

 

builder 패턴

복잡한 것을 만들 때는 전체를 한꺼번에 만들기보다는 

작게 분리하여 만든 후 다시 합치는 것이 편리하다. 

 

builder 패턴은 복잡한 인스턴스를 조립하여 만드는 구조로, 

 

복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리한다.

따라서 이 패턴은 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있다.

 

[그림 5-32]와 같이 구체적인 여러 개의 concreteBuilder들을 추상화하여

builder 추상 클래스를 만들고, 추상 클래스는 구체 클래스의 메서드를 결정한다. 

director 클래스는 construct 메서드를 하나 가지고 있고, 

 

그 메서드를 사용해서 어떤 구체 클래스가 선택되는지 결정한다.

 







728x90
반응형

'개발 관련 정보 > 디자인패턴' 카테고리의 다른 글

13. Strategy 패턴  (0) 2023.04.11
iterator 패턴  (0) 2023.04.06
10.composite 패턴  (0) 2023.04.03
9.observer 패턴  (0) 2023.03.29
8.Command 패턴과 Mediator 패턴  (0) 2023.03.28

댓글