* 프로그램 복잡도
- 서로 완벽하게 관계를 가지면 N * (N - 1) 가지의 관계가 존재
- 관계를 일일이 이해하는 것은 불가능
- 각각 클래스들이 순환 참조
- 각각의 클래스나 객체 간의 커뮤니케이션을 특정 클래스나 객체가 중재해주는 형태로 변환
- M : N의 복잡한 관계를 M : 1 의 관계로 간소화 시켜주는 방식
예제)
- 커피 자판기
- 현재 상태를 표시하는 램프
- 종이컵과 원료 관리, 원료를 배합해서 커피를 만드는 믹서
- 동적을 받아들이고 관리하는 동전 박스
클래스 정의
- Lamp
- Mixer
- CoinBox
- BillBox
- 동작들을 수행하기 위해서는 각 클래스의 객체들이 서로 어떤 형태로든 커뮤니케이션을 가져야 하는 점
- 자동 판매기가 고장났을 경우 Mixer가 이를 감지
- 이를 램프 객체에 알려 고장 표시 램프를 켬
- 동전이나 지폐를 입력하더라도 곧바로 반환
- 원료가 부족할 경우 보충되는 즉시 원료 부족 램프를 끄고 정상적인 서비스를 제공
- 동전이나 지폐가 꽉 찬 경우에는 관리자가 이를 빼내갈 때까지 기다렸다가 해당 램프를 끄고 정상적인 동작
- 자동 판매기가 고장났을 경우 Mixer 가 감지 -> 램프에 알려 고장 표시 램프 켜기
- 자동 판매기가 고장났을 경우 Mixer 가 감지 -> CoinBox나 BillBox에게도 알려 더 이상 돈을 받지 않도록 함
- CoinBox 객체에 동전이 부족하거나 꽉 찬 경우에도 Lamp 객체에 알려 알맞는 램프를 켜도록 해야 함
- 동전이 부족한 경우에는 BillBox 객체에게 알려 지폐 입력 시 반환
* Mediator 패턴
- 클래스 간 커뮤니케이션이나 연동 동작을 위한 중재 클래스를 별도로 정의
- 그 클래스의 객체를 활용해서 간접적으로 클래스 간 커뮤니케이션이나 연동 동작이 일어나게 만드는 것
댓글