7-7. 위임 숨기기
적용 시점
클라이언트 코드와 서버 코드의 위임 객체의 관계를 끊을 때
절차
위임 객체의 각 메서드에 해당하는 위임 메서들르 서버에 생성
클라이언트가 위임 객체 대신 서버를 호출하도록 수정한다. 하나씩 바꿀 때마다 테스트
모두 수정했다면, 서버로부터 위임 객체를 얻는 접근자를 제거
테스트
예시
❌Before
// 서버
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; // 위임 발생
⭕After
// 서버
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; // 위임 제거
Last updated