중재자 패턴 (Mediator Pattern)
중재자 패턴 공부한 것 가볍게 정리
작성일 : 2025.02.03
Design Pattern
-
중재자(Mediator) 패턴은 여러 객체들이 서로 직접 통신하는 대신, 중재자 객체를 통해 통신하도록 하여 객체 간의 결합도를 낮추고, 복잡한 상호작용을 중앙 집중화하는 디자인 패턴.
-
이벤트 집합 패턴, Pub/Sub 패턴과 비슷할 수 있지만, 이벤트 기반의 구독이 핵심이 아니고, 중재자 객체(혹은 클래스)를 통해서 작업하는 것이 큰 특징
-
아래는 GPT를 통해 얻은 예시 코드
// 중재자 클래스 정의 class Mediator { constructor() { this.colleagues = []; } // 객체 등록 register(colleague) { this.colleagues.push(colleague); colleague.setMediator(this); } // 메시지 전달: sender를 제외한 모든 동료에게 메시지 전달 send(message, sender) { this.colleagues.forEach(colleague => { if (colleague !== sender) { colleague.receive(message); } }); } } class Colleague { constructor(name) { this.name = name; this.mediator = null; } // 중재자 설정 메소드 setMediator(mediator) { this.mediator = mediator; } // 메시지 전송 메소드 send(message) { console.log(`${this.name}가 메시지 전송: "${message}"`); this.mediator.send(message, this); } // 메시지 수신 메소드 receive(message) { console.log(`${this.name}가 메시지 수신: "${message}"`); } } // 중재자 인스턴스 생성 const mediator = new Mediator(); // 동료 인스턴스 생성 const colleagueA = new Colleague('동료 A'); const colleagueB = new Colleague('동료 B'); const colleagueC = new Colleague('동료 C'); // 동료들을 중재자에 등록 mediator.register(colleagueA); mediator.register(colleagueB); mediator.register(colleagueC); // 동료 A가 메시지를 보내면 중재자가 나머지 동료들에게 메시지를 전달 colleagueA.send('안녕하세요!');
-
중재자 객체를 거쳐서 통신한다는 점에서 공부했던 책에서는 항공 교통 관제 시스템을 비교했음
-
퍼사드 패턴과 비교했을 때 추상화가 중점이 아니라는 점에서 다른 패턴임
-
옵저버 패턴과 비교했을 때 옵저버 패턴은 하나의 객체가 여러 이벤트를 구독하고 있는 형태라서 다름
-
Reference
- 자바스크립트 + 리액트 디자인 패턴 스터디 (애디 오스마니 저, 윤창식 번역, 2024.8.1) pp. 166-175