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