개요
클라이언트가 서버의 위임 객체의 다른 기능을 사용하고 싶을 때 마다 위임 메서드를 추가해야한다. 과도하면 단순히 위임 메서드만 들어나 성가셔진다.
서버는 단순히 중개자 역할로 전락할 수 있어 이럴 바엔 그냥 클라이언트가 위임 객체를 직접 호출하는 게 나을 수 있다.
데메테르 법칙을 너무 지나치게 지킬 때 이런 상황이 발생한다.
최소 지식 원칙 == 데메테르 법칙
내부 정보를 가능한 숨기고 밀접한 모듈과만 상호작용하여 결합도를 낮추자는 원칙
이 과정에서 래퍼 클래스나 위임 객체가 너무 늘어나는 부작용이 있다.
균형을 잡는 것이 중요하다.
그 균형점을 잡는 것은 너무 고민하지 않아도 된다. 리팩터링으로 다시 변경하기 쉽기 때문이다.
예시
Department 객체를 통해 manager를 찾는다.
//클라이언트 let manager = aPerson.manager; class Person{ get manager(){return this._department.manager;} } class Department{ get manager(){return this._manager;} } |
//클라이언트 let manager = aPerson.department.manager; class Person{ //게터 추가 후 클라이언트 코드 수정 후 위임(중개) 메서드 제거 get department(){return this._department;} } class Department{ get manager(){return this._manager;} } |
중개 메서드는 균형이 중요하다. 반드시 하나를 정해서 다 적용하거나 다 적용하지 않거나 할 필요가 없다.
자신이 처한 상황에 따라 절적히 섞어쓰는 지혜가 필요하다.
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
08 - 기능이동 - 함수 옮기기 (0) | 2023.08.03 |
---|---|
07 - 캡슐화 - 알고리즘 교체하기 (0) | 2023.08.01 |
07 - 캡슐화 - 위임 숨기기 (0) | 2023.07.30 |
07 - 캡슐화 - 클래스 인라인하기 (0) | 2023.07.29 |
07 - 캡슐화 - 임시 변수를 질의 함수로 바꾸기 (1) | 2023.07.28 |