Mediator Pattern Vs Observer Pattern

Mediator 패턴과 Observer 패턴은 객체 간 통신을 관리하는 디자인 패턴이지만, 그 접근 방식과 용도에 차이가 있다.

Mediator 패턴:

  • 객체 간의 복잡한 상호작용을 캡슐화하여 중재자 객체를 통해 간접적으로 통신하게 하는 패턴
  • 객체 간 결합도를 낮추고 상호작용을 중앙 집중화함
  • 복잡한 다대다 관계를 단순화하는 데 유용

Observer 패턴:

  • 객체의 상태 변화를 관찰하는 관찰자들에게 자동으로 알리는 패턴
  • 주체 객체와 다수의 관찰자 객체 간의 일대다 관계를 정의함
  • 상태 변경에 대한 효율적인 알림 메커니즘을 제공

Mediator 패턴은 객체 간 복잡한 상호작용을 중재자를 통해 관리하여 객체 간의 결합도를 줄이고 상호작용 로직을 집중시키는 데 적합하다. Observer 패턴은 상태 변화에 따른 자동 알림 및 실시간 동기화를 구현할 때 적합하며, 이벤트 기반 시스템에 자주 사용된다. 두 패턴 모두 객체 간의 결합도를 낮추는 데 기여하지만, Mediator는 상호작용을 캡슐화하고 Observer는 상태 변경에 반응하는 방식으로 목적과 활용 분야가 다르다.

특성Mediator 패턴Observer 패턴
목적객체 간의 상호작용을 Mediator를 통해 캡슐화하여, 객체들이 서로 직접 통신하지 않고 중재자를 통해 간접적으로 통신하도록 함.한 객체의 상태 변화가 발생했을 때, 이를 의존 객체들에게 자동으로 알림을 전달하여 상태를 동기화함.
구성요소Mediator, ConcreteMediator, ColleagueSubject, Observer
통신 구조중앙 집중식분산형 일대다
상호작용 방식중재자가 객체 간의 통신을 조정하며, 모든 상호작용은 중재자를 통해 이루어짐.Subject가 상태 변화 시 Observer들에게 알림을 보내는 1:N 관계로 통신.
객체 간 관계객체들이 중재자에 의존주체와 관찰자 간 직접 관계
제어 흐름중재자가 모든 상호작용 제어주체가 상태 변경 감지 및 알림
확장성중재자 복잡성으로 제한될 수 있음동적으로 관찰자 추가/제거 가능
주요 사용 사례복잡한 GUI, 항공 관제 시스템이벤트 처리, 상태 모니터링
결합도객체 간 결합도 낮음, 중재자에 의존주체와 관찰자 간 느슨한 결합
유연성객체 간 상호작용 변경 용이새로운 구독자 추가 용이
책임 분배Mediator에 상호작용 로직이 집중되어 있어 유지보수가 용이하지만, 복잡성이 증가할 수 있음.Observer들이 Subject의 상태 변화를 구독하므로, Observer가 많아지면 관리가 어려워질 수 있음.
복잡성 관리복잡한 상호작용을 단순화상태 변경 알림을 단순화
성능중앙 집중식으로 병목 가능성다수의 관찰자로 인한 성능 저하 가능
구현 난이도중재자 설계가 복잡할 수 있음비교적 간단한 구현
장점- 객체 간 의존성이 줄어듦
- 상호작용 로직을 Mediator에 집중하여 관리 용이
- Subject와 Observer 간의 느슨한 결합
- 실시간 상태 동기화 가능
단점- Mediator가 지나치게 많은 책임을 맡아 복잡해질 수 있음
- 추가적인 계층으로 인해 오버헤드 발생 가능
- Observer가 많아질 경우 성능 저하 가능
- 순환 참조 문제 발생 가능성
활용 사례- 채팅 서버와 클라이언트 간의 통신GUI 컴포넌트 간의 상호작용 조정- 이벤트 기반 아키텍처GUI의 이벤트 처리
- 데이터 모델과 UI의 동기화

두 패턴의 선택 기준:

  1. Mediator 패턴 선택 시기:

    • 객체 간 상호작용이 복잡하고 다대다(M:N) 관계일 때
    • 중앙 집중적인 제어가 필요할 때
    • 객체 간 결합도를 최소화하고 싶을 때
  2. Observer 패턴 선택 시기:

    • 일대다(1:N) 관계의 상태 변화 전파가 필요할 때
    • 느슨한 결합이 필요하고 각 객체가 독립적으로 동작해야 할 때
    • 이벤트 기반 시스템을 구현할 때

용어 정리

용어설명

참고 및 출처