본문 바로가기

Design Pattern

[디자인패턴] Mediator Pattern (중재자 패턴)

  • 중재자 패턴의 목적과 사용이유
  • 중재자 패턴이란
  • 중재자 패턴 vs 옵저버 패턴
  • 중재자 패턴의 예시
  • Related Patterns and Summary

 

  • 중재자 패턴의 목적과 사용이유

Purpose

    - 서로 상호작용하는 object들을 캡슐화함으로써 loose coupling을 유지하기 위해 사용한다.

Use When

    - 객체들 사이에 너무 많은 관계가 얽혀있을때

    - 객체들 사이의 상호작용 관계가 복잡할때

 

 

 


 

  • 중재자 패턴이란

Mediator Pattern Diagram

M개의 object 사이에 N개의 관계가 형성되어 있어 아주 복잡하게 얽혀있을때 이를 M:1 관계로 바꿔주기 위해 중재자 패턴을 사용한다. M개의 object 사이에 이들의 관계를 control 하는 Mediator를 하나 넣어서 Mediator가 모든 object들의 communication을 관리하도록 한다.

 

 

  • objects들 사이에 Mediator를 넣어 연결관계를 캡슐화한다.
  • class들을 loose coupling 상태로 유지할 수 있다. (서로 알 필요 없고 Mediator가 모두 관리하므로)
  • 장점 : 전체적인 연결관계를 이해하기 쉽다 (communication의 흐름을 이해하기 쉽다)
  • 단점 : 특정 application 로직에 맞춰져있기 때문에 다른 application에 재사용하기 힘들다 (옵저버 패턴의 경우 반대이다. 재사용성은 좋지만 연결관계가 복잡해지면 이해하기 어렵다)

 

 

 


 

  • 중재자 패턴 vs 옵저버 패턴

Observer Pattern
Mediator Pattern

 옵저버 패턴은 1개의 Publisher에 대해 N개의 Subscriber가 존재한다. 즉 복수의 Subscriber가 Publisher의 상태만 관찰하는 셈이다. 그러나 Mediator의 경우 M개의 Publisher와 n개의 Subscriber가 존재한다. 즉 M개의 Publisher가 서로서로 상태를 관찰하기 때문에 Publisher가 Subscriber가 될 수도, Subscriber가 Publisher가 될 수도 있다.

 

 

 


 

  • 중재자 패턴의 예시

Font Dialog boxe

 다음과 같이 Font box가 있을때 Font가 선택됨에 따라 지원되는 size, style, 등.. 이 다르다. 따라서 각 object들이 서로를 관찰하고 있어야 한다.

Mediator Pattern Diagram for Font Dialog

 따라서 위의 다이어그램과 같이 Font box의 Mediator인 FontDialogDirector가 복수개의 Widget object들을 관리해줘야 한다. 

Sequence Diagram for Font Dialog

1. ListBox가 Director에게 변화를 알려준다.

2. Director가 ListBox에서 어떤 selection이 선택된건지 요청해서 받아온다.

3. EntryField에게 그 selection을 전달한다.

4. 이제 EntryField는 그 selection에 맞는 style을 제공한다.

 

 

 


 

  • Related Patterns and Summary
  • Observer : 재사용성이 좋다. 복잡한 communication에서는 이해하기 힘들다. 1개의 Publisher와 N개의 Subscriber로 이루어져 있다.
  • Mediator : 재사용성이 안좋다. 복잡한 communication에서 이해하기 쉽다. M개의 Publisher, N개의 Subscriber 사이의 communication을 1개의 Mediator를 이용해 캡슐화하고 있다.