Mediator

GamSa Ham·2022년 11월 10일
0

GoF디자인패턴

목록 보기
13/22

1. 의도

  • 한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다.
  • 객체들이 직접 서로를 참조하지 않도록 하여 객체 사이의 소결합을 촉진시킵니다.
  • 개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 만듭니다.

2. 동기

3. 활용성

  • 여러 객체가 잘 정의된 형태이기는 하지만
    • 복잡한 상호작용을 가질 때
    • 객체 간의 의존성이 구조화 되지 않을 때
    • 객체 간의 의존성이 잘 이해하기 어려울 때
  • 한 객체가 다른 객체를 너무 많이 참조하고, 너무 많은 의사소통을 수행해서 그 객체를 재사용하기 힘들 때
  • 여러 클래스에 분산된 행동들이 상속없이 상황에 맞게 수정되어야 할 때

4. 구조

  • 전체적인 구성

  • 일반적인 객체 구조

  • 구현한 프로그램의 구성

5. 참여자

  • Mediator
    • Collegue 객체와 교류하는 데 필요한 인터페이스를 정의합니다.
  • ConcreteMediator
    • 객체와 조화를 이뤄서 협력 행동을 구현하며
    • 자신이 맡을 Colleague를 파악하고 관리합니다.
  • Colleague 클래스들
    • 자신의 중재자 객체가 무엇인지 파악합니다.
    • 다른 객체와 통신이 필요하면 그 중재자를 통해 통신되도록 하는 동료 객체를 나타내는 클래스 입니다.
  • 협력방법
    • Colleague는 Mediator에서 요청을 송수신합니다.
    • Mediator는 필요한 Colleague 사이에 요청을 전달할 의무가 있습니다.

6. 결과

  • 서브클래싱을 제한합니다.
    • 다른 객체 사이에 분산된 객체의 행동들을 하나의 객체로 국한
    • 변경하고자 하면 Mediator를 상속하는 서브클래스만 만들면 됨
    • Colleague는 여전히 재사용 가능
  • Colleague 객체 사이의 종속성을 줄입니다.
    • 중재자는 참여하는 객체간의 소결합을 증진
    • 이로써 Mediator 클래스와 Colleague 클래스 각각을 독립적으로 다양화시킬 수 있고, 재사용할 수 있음
  • 객체 프로토콜을 단순화합니다.
    • N:N의 관계를 1:N관계로 축소 시킴
  • 객체 간의 협력 방법을 추상화합니다.
    • 객체의 행동과 상관없이 객체간 연결 방법에만 집중할 수 있다.
    • 시스템에서 객체가 어떻게 동작하는지를 좀 더 명확히 하는 데 도움이 된다.
  • 통제가 집중화됩니다.
    • 프로토콜을 모두 캡슐화하기 때문에 어느 동료 객체보다도 훨씬 복잡해질 수 있다.
    • 때문에 유지보수가 어려워질 수도 있다.

7. 구현

  • 추상 클래스인 Mediator 생략
    • 하나의 중재자 클래스만 쓸거라면 추상 클래스를 쓸 이유가 없음.
  • 동료 객체-중재자 객체 간 의사소통
    • 구현하는 한 가지 방법은 감시자 패턴을 사용하는 것
    • 중재자 클래스 내에 특화된 통지 인터페이스를 정의하여 동료 객체들이 직접 통신하게 하는 것
profile
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.

0개의 댓글