# 03-18. 중개자


# ✋ Intro



# (1) 중개자 제거하기

  • 지난번 위임 숨기기 기법을 통해서 클라이언트가 위임 객체의 또 다른 기능을 사용하고 싶을 때마다 그 앞단의 클래스에 위임 메서드를 추가해야 한다.

    • 이렇게 기능을 추가하다 보면 단순히 전달만 하는 위임 메서드들이 너무 많아지게 되어 해당 클래스는 본래의 기능보다 그저 중개자 역할로 변질되어 버릴 수 있다.
    • 차라리 클라이언트가 위임 객체를 직접 호출하는 게 나을 수 있다.
  • 이러한 내용은 디미터의 법칙 (opens new window)과도 연관이 깊다. (추가 참고 자료 (opens new window))

    • 내부 정보를 가능한 한 숨기고 밀접한 모듈과만 상호작용하여 결합도를 낮추는 원칙으로, 자칫하면 이 과정에서 위임 혹은 wrapper 메서드가 너무 늘어나는 등의 부작용이 있을 수 있으니 상황에 맞게 응용하는 게 좋다.
  • 즉, 위임 숨기기 기법과 중개자 제거하기 기법을 통해 적절하게 숨기고 캡슐화하면 될 것 같다.

// before

manager = aPerson.manager;

class Person {
  get manager() {
    return this.department.manager;
  }
}
// after

manager = aPerson.department.manager;