Skip to main content

Posts

Showing posts from October 13, 2013

Mediator 중재자

Mediator 객체들 간의 의사소통을 하나 이상의 중재자들이 중재한다. 구성은 Mediator <-> Colleague 예를 들어, 어떤 폼에 버튼과 텍스트 박스가 있을 경우, 버튼이 직접 텍스트 박스를 접근하지 않고, 폼에 작업 요청을 하는 것이다. 버튼에 이벤트가 발생하면, 이를 폼에 전달하여, 폼에서 처리하도록 하는 것이다. 각 객체의 상태에 따라 서로의 상태를 바꾸게 되는데 이 작업을 각 객체들이 대상 객체를 직접 참조하여 상태를 파악하거나 상태를 변경되게 되면, 밀결합이 된다. 그리고 소스 코드가 아주 복잡해지고, 수정 작업이 매우 까다로워진다. 달리 말해, 일부 기능 수정에 따른 타 기능 영향(side effect)이 급격하게 증가하게 된다. 당연히 유지보수 비용은 늘어난다. 이 때, 중재자라는 놈을 이들 사이에 주입한다. 그리고 이들 간의 요청을 중재자에 요청을 하고, 중재자는 모든 객체의 상태를 알아내어서, 조치를 취한다. 구현 방법 1. 관련 colleague들이 하나의 mediator와만 동작한다면, mediator인터페이스는 필요없다. 2. 감시자 패턴을 이용하여, 구현할 수 있다.   colleague에서 상태 변화가 일어날 시, 이를 중재자에 통보하고, 중재자는 처리 방법에 따라 다른 colleague에 이 변경을 전달한다. 3. mediaor 클래스 내에 특화된 통지(notification) 인터페이스를 정의하여, colleague 들이 직접 서로 통신(위임 방식)하게 할 수 있다.