HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
객체 지향 프로그래밍
객체 지향 프로그래밍
/
디자인 패턴
디자인 패턴
/
Mediator Pattern
Mediator Pattern
Mediator Pattern

Mediator Pattern

💡
M:N 관계를 1:1관계로 변경하기

Motivation

Text Message vs Group Chat
Text Message vs Group Chat
 

Intent

  • Mediator를 통해 구체 Collegue가 서로를 참조하며 결합도를 높이는 것을 막을 수 있다.

Implementation

notion image
Mediator - 중재자, Colleague의 리스트를 저장함
Colleague - 자신의 중재자에 대한 참조를 가짐
구체 중재자 - 중재 방식을 정의
구체 Colleague - 처리 방식을 정의

Applicablity

이럴때 사용하세요
  • 객체간의 커뮤니케이션이 잘 정의 되어있으며 또한 복잡할때
  • 객체간의 참조와 커뮤니케이션이 복잡해서 재사용이 어려울때
  • 객체간의 행동이 customizable 해야할때

Examples

Chat application - 코드는 여기서 확인하세요
 

Specific problems & Implementation

Abstract Mediators
  • 필요에 따라 구체 클래스 혹은 인터페이스를 중재자로 사용할 수 있습니다.
  • Colleague와 Mediator 사이에 커뮤니케이션을 구현하는 여러 방식이 있습니다.
    • 옵저버 패턴 - Mediator 는Publisher (Observer), Colleague가 Subscriber (Obersavable)을 담담하게 할 수 있습니다. Colleague가 변경되면 Mediator 는 notify되고 모든 Colleague 를 notify할 수 있습니다.
    • 위 그림처럼 단순히 method call 방식으로 message를 send 할 수 있습니다.
    • 더욱 복잡한 방식으로 Mediator 에 Message Queue를 구현하여 비동기 방식으로 구현할 수 있습니다.
 
 

Related Patterns

  • Facade Pattern
    • Mediator가 유일한 active class이고 Colleague는 모두 passive class라면
    • Mediator = Facade pattern입니다.
  • Adapter Pattern
    • 중재자 패턴은 동료 클래스들간에 오직 “중재”만 합니다. Mediator는 메시지를 전혀 바꾸지 않고 전달만 합니다.
    • 서로 다른 클래스간의 중재인 경우, 전달하는 메시지에 변경이 일어난다면 이것을 Adapter Pattern입니다.
  • Observer Pattern
    • 옵저버 패턴과 중재자 패턴은 같은 문제를 다루는 비슷한 패턴입니다.
    • 주요한 차이점은 두 패턴이 강조하는 문제입니다.
      • 옵저버 패턴은 Publisher와 Subscriber간의 커뮤니케이션에 집중하고
      • 중재자 패턴은 Colleague간의 커뮤니케이션에 집중합니다.