클라이언트로부터 위임객체를 숨기는 리팩토링 기법입니다. 클라이언트로 위임객체가 노출되어 있으면, 인터페이스가 변경됐을때 모든 클라이언트에서 코드를 수정해야 합니다. 만약 서버에서 캡슐화되어 있다면, 한 곳에서 코드를 수정하면 되기 때문에 유지 보수에 큰 효과를 얻을 수 있습니다.
/**
* 이번 시간에는 클라이언트로부터 위임 객체를 숨기는 리팩토링 기법에 대해서 알아보자.
* 이 위임 객체가 클라이언트로 외부에 노출되면, 인터페이스가 바뀔때 모든 클라이언트에서 코드를 수정해야 하지만,
* 서버로 캡슐화를 해주면, 서버에서만 수정해주면 되기 때문에 유지 보수에 큰 효과를 준다.
*/
class Person {
constructor(name) {
this._name = name;
this._department = new Department();
}
get name() {
return this._name;
}
get department() {
return this._department;
}
set departmnet(arg) {
this._department = arg;
}
}
class Department {
get chargeCode() {
return this._chargeCode;
}
set chargeCode(arg) {
this._chargeCode = arg;
}
get manager() {
return this._manager;
}
set manager(arg) {
this._manager = arg;
}
}
// 위임 객체가 외부로 노출됐을때는 아래와 같이 객체가 노출된다.
manager = aPerson.department.manager;
// 위임 객체를 캡슐화해주자.
class Person {
constructor(name) {
this._name = name;
this._department = new Department();
}
// 위임 메서드를 만들어서 캡슐화 하자.
get manager() {
return this._department.manager;
}
get name() {
return this._name;
}
get department() {
return this._department;
}
set departmnet(arg) {
this._department = arg;
}
}
// 클라이언트로부터 위임객체가 캡슐화되었다.
maanger = aPerson.manager;
캡슐화라는 것이 단순히 필드를 숨기는 것 그 이상의 역할을 한다는 것을 알게 됐다. 객체가 의존하는 또 다른 객체를 클라이언트로부터 숨기는 역할처럼 말이다.