[Design Pattern] Mediator

[디자인 패턴][행위 패턴] 중재자

Posted by ChaelinJ on May 06, 2021

Mediator

  • 모든 클래스 간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴
  • M:N 관계에서 M:1 관계로 복잡도를 떨어뜨려 유지 보수 및 재사용의 확장성에 유리

객체들 사이의 관계가 얽혀있어 복잡할 때 사용해 결합도를 낮춰줍니다.

객체 간의 관계에 중재자를 두어 각각의 M:N을 M:1로 바꿔줍니다. 다음 그림처럼 관제탑을 거치는 것입니다.

다이어그램

  • Mediator: Colleague 객체 간의 상호작용을 위한 인터페이스
  • Colleague: 서로 상호작용을 하는 객체의 공통 인터페이스
    • Mediator로 소통하는 객체

예제와 이해

Mediator로 통신하는 비행기를 예시로 했습니다.

  • AirplaneMediator: 비행기 관제탑 목적지 리스트(destinations)에 Airplane 객체를 추가하고, Airplane 객체에서 sendMessage를 하면 전체 리스트에 메세지를 전송합니다.
  • Airplane: 비행기 setMediator를 통해 관제탑을 설정한 후, 해당 관제탑에 목적지를 추가합니다. 그 후 메세지를 보냅니다.

Mediator

Colleague - Device & Airplane

Main

출력

------From Airplane1 To Airplane2-------
[from 1][to 2]message: Hi there
------From Airplane3 To Airplane2, 4--------
[from 3][to 2]message: How are you
[from 3][to 4]message: How are you

위처럼 Airplane 객체 간의 사이엔 직접적인 연결이 없고, Mediator를 통해서만 통신이 이루어집니다.

그렇기 때문에 통신 상에서 변경사항이 생길 경우, Mediator를 수정하므로써 관계 간 행동을 수정할 수 있어 유지보수에서 용이한 부분이 있습니다.

장단점

장점

  • 객체간 관계의 복잡도를 줄이며, 결합도를 줄여줍니다.
  • 객체들 간 수정을 하지 않고 관계를 수정할 수 있습니다.

단점

  • 중재자 객체에 권한이 집중화되어 설계 및 중재자 객체 수정 시 주의가 필요합니다.

옵저버 패턴과 중재자 패턴의 차이?

두 패턴의 다이어그램을 보면 굉장히 비슷합니다.

중재자 패턴

옵저버 패턴

두 패턴의 차이는 Publisher - Subscriber 간의 관계 차이입니다.

옵저버 패턴은 하나의 Publisher에 대한 N개의 Subscriber가 존재합니다.

중재자 패턴은 N개의 Publisher에 M개의 Subscriber가 존재하며, 양 방향으로 상태를 관찰하기 때문에 Publisher와 Subscriber 간의 구분이 없이 Publisher가 되었다가 Subscriber가 될 수도 있습니다.


참조

감사합니다.

Text by Chaelin. Photographs by Chaelin, Unsplash.