개요
모듈화 설계를 제대로하는 핵심은 캡슐화
캡슐화는 모듈들이 시스템의 다른 부분에 대해 알아야 할 내용을 줄여 준다.
코드 변경이 쉬워진다.
서버 객체의 필드가 가리키는 객체(위임)의 메서드를 호출하려면 클라이언트는 이 위임 객체를 알아야 한다.
이 위임 객체 인터페이스 변경 시 이 인터페이스를 사용하는 모든 클라이언트 코드를 수정해야 한다.
이런 의존성을 없애기 위해 서버 클래스에서 자체 위임 메서드를 만들어 위임 객체의 존재를 숨기면 된다.
예시
class Person{ constructor(name){ this._name = name; } get name(){return this._name;} get department(){return this._department;} set department(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;} } //클라이언트 let manager = aPerson.department.manager; |
class Person{ constructor(name){ this._name = name; } get name(){return this._name;} get department(){return this._department;} set department(arg){this._department = arg;} get manager(){return this.department.manager;} } class Department{ get chargeCode(){return this._chargeCode;} set chargeCode(arg){this._chargeCode=arg;} get manager(){return this._manager;} set manager(arg){this._manager=arg;} } //클라이언트 let manager = aPerson.manager; |
class Person{ constructor(name){ this._name = name; } //접근자 삭제 get name(){return this._name;} get manager(){return this.department.manager;} } class Department{ get chargeCode(){return this._chargeCode;} set chargeCode(arg){this._chargeCode=arg;} get manager(){return this._manager;} set manager(arg){this._manager=arg;} } //클라이언트 let manager = aPerson.manager; |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
07 - 캡슐화 - 알고리즘 교체하기 (0) | 2023.08.01 |
---|---|
07 - 캡슐화 - 중개자 제거하기 (0) | 2023.07.31 |
07 - 캡슐화 - 클래스 인라인하기 (0) | 2023.07.29 |
07 - 캡슐화 - 임시 변수를 질의 함수로 바꾸기 (1) | 2023.07.28 |
07 - 캡슐화 - 기본형을 객체로 바꾸기 (0) | 2023.07.27 |