7-7. 위임 숨기기

적용 시점

  • 클라이언트 코드와 서버 코드의 위임 객체의 관계를 끊을 때

절차

  1. 위임 객체의 각 메서드에 해당하는 위임 메서들르 서버에 생성

  2. 클라이언트가 위임 객체 대신 서버를 호출하도록 수정한다. 하나씩 바꿀 때마다 테스트

  3. 모두 수정했다면, 서버로부터 위임 객체를 얻는 접근자를 제거

  4. 테스트

예시

❌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