본문 바로가기
CS

[디자인패턴] 중재자 패턴 (Mediator pattern) 의 개념, 구조 및 예시 요약정리

by Warehaus 2022. 8. 19.

 

 

 

[디자인패턴] GoF Pattern 요약정리와 패턴 별 활용 알아보기

요즘 디자인 패턴을 전체적으로 훑어보는 공부를 하고있습니다. 너무나 급변하는 세상이라 쫓아갈 것들이 많지만.. 디자인 패턴은 개발자에게는 거의 근본 그 자체라고 생각하기에 가끔 씩 돌

armin.tistory.com

 

 

목적

개별 오브젝트 그룹의 상호작용과 통신 방식을 캡슐화하여 coupling을 낮추기 위해 사용하는 패턴

 

 

Use when

- 여러 객체 간 정의된 통신이 복잡하게 이루어 져 있을 때

- 제어 또는 통신관점에서의 관계들이 복잡한 경우

 

 

구조도 및 상세설명

 

출처: 위키피디아

 

- Mediator : Colleague 들의 중재자 역할을 수행하는 추상화 객체

- Concrete Mediator : ConcreateColleague 의 기능을 호출하여 필요한 결과를 받는다.

- Collague : Mediator에 연결 될 객체들의 부모 클래스

- ConcreteColleague :  Mediator에 연결되어 필요한 행위를 수행하는 객체

 

 

우선, 위 구조도 에 나타나 있는 ConcreteMediator는 ConcreteColleague 객체들의 참조를 가지고 있어야 합니다.

 

ConcreteColleague에서 변경이 발생하는 경우, Colleague는 변경사항을 Mediator에게 알리고, Mediator는 이 변경이벤트에 따라 ConcreteColleague값을 활용/업데이트 합니다.

 

중재자 패턴에서 가장 알려진 예시가 관제탑 예시인데요

 

Mediator가 관제탑이고 ConcreteColleague로 보잉747, F22 랩터가 있다고 가정해 봅시다.

 

보잉 747로 부터 착륙시그널이 Mediator에 전달되면(changed event), Mediator는 이 정보를 보잉747기 객체로 부터 확인합니다.

그 뒤, 보잉747을 위한 활주로를 비우기 위해 F22 랩터 객체에 착륙금지 시그널을 전달합니다.

 

이 예시에서 관제탑(중재자) 는 보잉747과 랩터에 대한 참조를 가지고 있어야 하고, 각 객체는 자신의 변경사항을 Mediator에게 알려주게 됩니다. 중재자와 개별 객체간 통신은 서로 참조를 통해 이루어지는데 여기서 가장 중요한 포인트는 비행기 객체(보잉747, 랩터) 간에는 아무런 참조정보도 없고 통신도 하지 않는 다는 점 입니다.

 

여기까지가 중재자 패턴에 대한 설명이었구요,

제 사견입니다만..

 

중재자 패턴에서 ConcreteColleague 간의 통신이 절대 이뤄져서는 안 된다 정도만 머리에 담아두더라도 중재자 패턴을 절반은 알고 있다고 봐도 될 것 같습니다.