7-8. 중재자 제거하기
적용 시점
위임 메서드가 너무 많이 생겨서 관리가 힘든 경우
클라이언트에서 위임 객체를 직접 호출하는게 나은 경우
절차
위임 객체를 얻는 게터를 만듬
위임 메서드를 호출하는 클라이언트가 모두 이 게터를 거치도록 수정. 하나씩 바꿀 때마다 테스트
모두 수정했다면 위임 메서드를 삭제
예시
❌Before
// 서버
class Person {
constructor(name, department) {
this._name = name;
this._department = department;
}
get name() { return this._name; }
get manager() { return this._department.manager; } // 위임 메서드
set manager(arg) { this._department.manager = arg; } // 위임 메서드
}
class Department {
constructor(chargeCode, manager) {
this._chargeCode = chargeCode;
this._manager = manager;
}
get chargeCode() { return this._department; }
set chargeCode(arg) { this._chargecode = arg; }
get manager() { return this._manager; }
set manager(arg) { this._manager = arg; }
}
// 클라이언트
aPerson = new Person('Peanut', new Department('code123', 'Scott'));
manager = aPerson.manager; // 위임 제거
⭕After
// 서버
class Person {
constructor(name, department) {
this._name = name;
this._department = department;
}
get name() { return this._name; }
get department() { return this._department; }
set department(arg) { this._department = arg; }
}
class Department {
constructor(chargeCode, manager) {
this._chargeCode = chargeCode;
this._manager = manager;
}
get chargeCode() { return this.chargeCode; }
set chargeCode(arg) { this._chargecode = arg; }
get manager() { return this._manager; }
set manager(arg) { this._manager = arg; }
}
// 클라이언트
aPerson = new Person('Peanut', new Department('code123', 'Scott'));
manager = aPerson.department.manager;
Last updated