19.대리 객체 은폐 Hide Delegate

클라이언트가 객체의 위임 클래스를 직접 호출하고 있는 경우 서버에 메소드를 만들어서 대리객체(delegate)를 숨겨라.

동기 : 캡슐화

  • 객체가 시스템의 다른 부분에 대한 정보를 일부분만 알 수 있도록 함. -> 변경이 일어날 때 전달해야 하는 객체가 줄어들어 변경이 용이해짐.

hideDelegate.png

Client.obj().GetDepartment().GetManager();

위의 경우, 너무 많은 정보들이 밖으로 노출되어 소스를 간략하게 유지하는데 방해가 될 수 있습니다. 또한 외부에서 함부로 접근하면 안되는 정보들이 있을 수 있다.

Client.obj().GetDepartment().GetMember();

실제 Department의 회원도 호출할 수 있는데, 이것이 의도치 않은 결과가 될 수 있기 때문에 외부에서 접근하는 것을 원하지 않을 수 있다.

해결방법으로

Client.obj().GetManager();

위와 같이 외부의 사용자는 Department 내부를 알지 못하더라도, GetManager() 메소드만으로 원하는 작업을 할 수 있어 보다 나은 해결책이라고 할 수 있다.