[Refactoring] # 위임 숨기기

mechaniccoder·2021년 10월 19일
0
post-thumbnail

클라이언트로부터 위임객체를 숨기는 리팩토링 기법입니다. 클라이언트로 위임객체가 노출되어 있으면, 인터페이스가 변경됐을때 모든 클라이언트에서 코드를 수정해야 합니다. 만약 서버에서 캡슐화되어 있다면, 한 곳에서 코드를 수정하면 되기 때문에 유지 보수에 큰 효과를 얻을 수 있습니다.

Code

/**
 * 이번 시간에는 클라이언트로부터 위임 객체를 숨기는 리팩토링 기법에 대해서 알아보자.
 * 이 위임 객체가 클라이언트로 외부에 노출되면, 인터페이스가 바뀔때 모든 클라이언트에서 코드를 수정해야 하지만,
 * 서버로 캡슐화를 해주면, 서버에서만 수정해주면 되기 때문에 유지 보수에 큰 효과를 준다.
 */

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;

느낀점

캡슐화라는 것이 단순히 필드를 숨기는 것 그 이상의 역할을 한다는 것을 알게 됐다. 객체가 의존하는 또 다른 객체를 클라이언트로부터 숨기는 역할처럼 말이다.

Reference

  • Refactoring: Improving the Design of Existing Code (2nd Edition) p268-270.
profile
세계 최고 수준을 향해 달려가는 개발자입니다.

0개의 댓글