#13BehavioralMedium

Mediator Pattern (ChatRoom)

Mediator Pattern

사용자들이 서로를 직접 참조하지 않고 **중재자(ChatRoom)**를 통해서만 메시지를 주고받도록 구현하세요.

API

export class User {
  constructor(public name: string);
  send(message: string, to?: string): void;
  receive(message: string, from: string): void;
  inbox: { from: string; message: string }[];
}

export class ChatRoom {
  register(user: User): void;
  send(message: string, from: string, to?: string): void;
}

동작

  • User반드시 ChatRoom에 등록 후 동작
  • user.send('hi') → 모든 다른 등록 사용자에게 broadcast (자기 자신 제외)
  • user.send('hi', 'Bob') → Bob에게만 전달
  • User.receive는 호출 시 inbox{ from, message }를 push
  • ChatRoom은 user 목록을 관리, send 라우팅 담당
  • User는 다른 User의 참조를 직접 갖지 않아야 함 (mediator 통해서만)

학습 포인트

  • 다대다 통신을 일대다로 단순화
  • 컴포넌트(User) 간 결합도를 줄이고, 라우팅 로직을 한 곳(ChatRoom)에 집중
  • 새 컴포넌트 추가 시 기존 컴포넌트들 수정 불필요
언어: