미디에이터 패턴(Mediator Pattern)은 객체 간 직접 통신 대신 중앙 중재자를 통해 통신하게 하는 행동 패턴이다. 항공 교통 관제탑처럼 복잡한 의존 관계를 단순화한다.
구조
AS-IS: A ↔ B ↔ C ↔ D (메시 형태, 복잡)
TO-BE: A → M ← B (스타 형태, 단순)
C → M ← D
python
from abc import ABC, abstractmethod
from typing import List
class ChatMediator(ABC):
@abstractmethod
def send(self, message: str, sender: 'User'): pass
@abstractmethod
def add_user(self, user: 'User'): pass
class ChatRoom(ChatMediator):
def __init__(self, name: str):
self.name = name
self._users: List['User'] = []
def add_user(self, user: 'User'):
self._users.append(user)
def send(self, message: str, sender: 'User'):
for user in self._users:
if user != sender:
user.receive(f"[{self.name}] {sender.name}: {message}")
class User:
def __init__(self, name: str, mediator: ChatMediator):
self.name = name
self._mediator = mediator
mediator.add_user(self)
def send(self, message: str):
print(f"{self.name} 전송: {message}")
self._mediator.send(message, self)
def receive(self, message: str):
print(f"{self.name} 수신: {message}")
room = ChatRoom("개발팀")
alice = User("Alice", room)
bob = User("Bob", room)
carol = User("Carol", room)
alice.send("안녕하세요!")
# Bob 수신: [개발팀] Alice: 안녕하세요!
# Carol 수신: [개발팀] Alice: 안녕하세요!
활용 사례
- •이벤트 버스: 컴포넌트 간 이벤트 중계
- •항공 교통 관제: 항공기 간 직접 통신 없이 관제탑을 통해 조율
- •UI 폼 컨트롤: 여러 위젯 간 상태 동기화
- •마이크로서비스: 서비스 메시(Istio)
관련 개념