디자인패턴 책임연쇄(Chain of Responsibility) 패턴

황제낙엽 2007.11.25 11:41 조회 수 : 408 추천:88

1. 책임연쇄(Chain of Responsibility)

1)    정의

요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여함으로써 요청하는 객체와 처리하는 객체 사이의 결합도를 없애려는 것이다. 요청을 해결할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달한다.

 

책임연쇄 패턴은 두 객체간의 결합도를 낮추기 위한 패턴이다.

결합도는 두 개의 객체가 연결되어 있는 정도를 나타낸다.

 

npec_gamediz.jpg

다음과 같이 A, B, C라는 객체가 있다.

A와 B와 그림과 같이 결합도가 높게 되어 있으면, B를 없애고 새로운 객체인 C와 결합을 시키려고 할 때 분리에 대한 노력도 많이 들고, C를 붙이기 위한 노력도 많이 들게 된다.

이렇기 때문에 결합도를 낮춰서 노력을 적게 들일 수 있는 방법을 연구하게 되었고 그에 따라 책임연쇄 패턴이 생겨났다고 할 수 있다.

 

2)    예제

책임연쇄 패턴은 현실로 비교하면 이런 것과도 비교할 수 있다.

진용씨 UI부분 진용씨가 맡고 계시죠?

아니오 UI부분은 김태희씨가 맡고 있는데요….

김태희씨 UI부분에서 파티 시스템 관련해서 물어볼 께 있는데요?

음 파티 시스템 부분은 전지현씨가 맡고 계세요……

(그렇다… 사실 책임연쇄 패턴의 실체는 내가 맡은 책임이 아니라고 발뺌하면서 책임자를 연결해주는 그런 패턴이였던 것이다 -_-; )

 

 3)    게임에서의 활용

게임의 UI 부분에서 책임연쇄 패턴을 사용한 부분을 찾을 수 있는데

가장 대표적인 예가 툴팁이나 도움말 기능을 띄울 때 볼 수 있다.

 

 npee_gamediz.jpg

 

위의 표 10을 보자

표 10에는 버튼, 서브창, 메인창이라는 3가지의 객체가 존재하는 것을 볼 수 있다.

창위에 마우스 커서를 올려놓은 후에 F1을 누르면 도움말이 뜨는 기능이 구현되어 있다고 했을 때 어떤 식으로 구현이 될까?

 

먼저 버튼 위에 마우스 커서를 올려놓고 F1을 누르면 버튼에 대한 도움말이 나와야 한다.

그런데 만약 버튼이 도움말을 가지고 있지 않다면? 어떻게 처리해야 할까? 도움말을 출력하지 말아야 할까?

그렇게 될 경우에 매우 어색하기 때문에 버튼보다 상위 개념인 서브창의 도움말을 출력하도록 한다. 만약 서브창 조차 도움말을 가지고 있지 않다면 그 보다 상위 개념인 메인창 부분의 도움말을 출력해준다.

 

이 처럼 명령은 분명 버튼이라는 객체에 내렸는데 버튼은 서브창에 책임을 넘기고 서브창은 메인창에 책임을 넘기는 것, 이러한 구조가 될 수 있도록 하는 것이 바로 책임연쇄 패턴이라고 할 수 있다.

 

구조상으로는 버튼, 서브창, 메인창은 같은 인터페이스를 상속받아서 공유를 하는 것이며 최초 설계할 때부터 책임을 넘겨줄 대상을 가지고 있게 된다.

(ex : 버튼 a 서브창 a 메인창)

번호 제목 글쓴이 날짜 조회 수
64 [ChatGPT] 소프트웨어 품질 관리에서 필요로 하는 소양 황제낙엽 2025.05.02 242
63 [Selenium] 크롬 브라우저 실행 화면을 출력하거나 감추는 방법 황제낙엽 2024.05.05 377
62 [Selenium] 페이지 이동 함수 황제낙엽 2024.05.05 346
61 [Selenium] Chrome 실행 자동화 file 황제낙엽 2024.05.03 1498
60 [Selenium] MS Edge 실행 자동화(RPA, Robotic Process Automation) file 황제낙엽 2024.05.02 701
59 [Selenium] Warning : Unable to find CDP implementation matching 124 황제낙엽 2024.05.02 1062
58 프로젝트 WBS 예제 (Microsoft Project 2013) secret 황제낙엽 2021.05.12 0
57 WBS (Work Breakdown Structure) 황제낙엽 2020.06.18 286
56 프로젝트 진행 절차 file 황제낙엽 2020.05.21 405
55 BDD (Behaviour-Driven Development) 황제낙엽 2020.04.02 358
54 요구사항 개발과 요구사항 관리 요약(요구사항기술서 샘플) file 황제낙엽 2019.07.07 425
53 뒤늦게 정리하는 UML (Unified Modeling Language) 요약 file 황제낙엽 2017.03.29 767
52 StarUML™의 숨은 재미있는 기능 황제낙엽 2017.03.29 2481
51 The Facade Pattern file 황제낙엽 2017.01.04 655
50 와블스 프로세스(Warbles Process) 황제낙엽 2016.07.17 550
49 비 개발자 출신이 스크럼 마스터가 될 수 있는가? 황제낙엽 2015.06.25 621
48 디자인패턴[Observer 패턴] 황제낙엽 2013.10.18 500
47 PMBOK 5판 이해관계자 관리의 이해 [1] file 황제낙엽 2013.08.23 1650
46 Validation and Verification file 황제낙엽 2013.08.23 432
45 이해관계자의 관리/이해관계자 분석 황제낙엽 2013.08.23 670