Programing/javascript

자바스크립트 Mediator Pattern

2025. 4. 19. 09:13
반응형

Mediator Pattern(미디에이터 패턴) 은 객체 간의 복잡한 의존 관계를 하나의 중재자 객체(Mediator)로 통합하여, 객체들이 직접 통신하지 않고 중재자를 통해서만 상호작용하도록 만드는 행동 디자인 패턴입니다.


🧱 Mediator Pattern이란?

Mediator Pattern은 객체 간의 상호작용을 캡슐화하여, 서로 직접 연결되지 않고 중앙 집중식 통신 방식으로 구조를 단순화합니다. 특히 많은 객체가 서로 메시지를 주고받는 UI 구성에서 유용하게 사용됩니다.

class ChatMediator {
    constructor() {
        this.users = [];
    }
    register(user) {
        this.users.push(user);
        user.setMediator(this);
    }
    sendMessage(from, message) {
        this.users.forEach(user => {
            if (user !== from) {
                user.receive(message);
            }
        });
    }
}

class ChatUser {
    constructor(name) {
        this.name = name;
        this.mediator = null;
    }
    setMediator(mediator) {
        this.mediator = mediator;
    }
    send(message) {
        this.mediator.sendMessage(this, message);
    }
    receive(message) {
        console.log(`${this.name} 수신: ${message}`);
    }
}

const mediator = new ChatMediator();
const alice = new ChatUser("Alice");
const bob = new ChatUser("Bob");

mediator.register(alice);
mediator.register(bob);

alice.send("안녕하세요!");

✅ 장점

  1. 의존성 감소: 객체 간 직접적인 참조 제거
  2. 유지보수 용이: 통신 로직이 하나의 객체에 집중되어 관리가 쉬움
  3. 확장성 증가: 객체 추가 시 수정 범위 최소화 가능

❌ 단점

  1. 중재자 객체 복잡도 증가: 모든 로직이 집중되면 오히려 복잡해짐
  2. 성능 문제: 메시지 전달이 중간 단계를 거치므로 성능 저하 우려
  3. 잘못된 설계 시 집중 과부하: 객체가 많아질수록 중재자 관리가 어려워짐

🛠️ 실전 예시: UI 컴포넌트 간 통신

class FormMediator {
    constructor() {
        this.components = {};
    }
    register(name, component) {
        this.components[name] = component;
        component.setMediator(this);
    }
    notify(sender, event) {
        if (event === 'inputChanged') {
            this.components['submitButton'].toggle(sender.isValid());
        }
    }
}

class InputField {
    constructor() {
        this.mediator = null;
        this.value = '';
    }
    setMediator(mediator) {
        this.mediator = mediator;
    }
    type(text) {
        this.value = text;
        this.mediator.notify(this, 'inputChanged');
    }
    isValid() {
        return this.value.length > 3;
    }
}

class SubmitButton {
    constructor() {
        this.enabled = false;
    }
    setMediator(mediator) {
        this.mediator = mediator;
    }
    toggle(state) {
        this.enabled = state;
        console.log(`버튼 상태: ${state ? '활성화됨' : '비활성화됨'}`);
    }
}

const mediator = new FormMediator();
const input = new InputField();
const button = new SubmitButton();

mediator.register('inputField', input);
mediator.register('submitButton', button);

input.type('Hi');
input.type('Hello');

🧩 결론

Mediator Pattern은 복잡한 객체 관계를 효율적으로 정리할 수 있는 중재자 기반 통신 방식으로, 특히 UI 구성 요소, 채팅 시스템, 이벤트 처리 시스템 등에서 유용하게 활용됩니다. 객체 간 의존성을 줄이면서도 명확한 의사소통 구조를 설계할 수 있어 유지보수성과 확장성 측면에서 강력한 이점을 제공합니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 Iterator Pattern  (0) 2025.04.19
자바스크립트 State Pattern  (1) 2025.04.19
자바스크립트 Strategy Pattern  (0) 2025.04.19
자바스크립트 Command Pattern  (0) 2025.04.19
자바스크립트 Observer Pattern  (0) 2025.04.19
자바스크립트 Adapter Pattern  (0) 2025.04.19
자바스크립트 Proxy Pattern  (0) 2025.04.19
자바스크립트 Facade Pattern  (0) 2025.04.19
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 Strategy Pattern
  • 자바스크립트 Command Pattern
  • 자바스크립트 Observer Pattern
  • 자바스크립트 Adapter Pattern
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    디자인패턴
    SQL
    기초
    js패턴
    블로그
    Java
    JavaScript
    IT블로그
    위시리스트
    읽고 싶은 책
    IT·컴퓨터
    자바
    IT 관련
    사고 싶은 책
    jsp
    iT's MY LiFE
    It
    자바스크립트
    자바스크립트유틸
    php
Dongkkase
자바스크립트 Mediator Pattern
상단으로

티스토리툴바