카테고리 없음
리팩터링 Chapter 7 - 캡슐화
HOONY_612
2021. 10. 3. 20:53
반응형
이번 포스팅은 캡슐화에 관한 내용입니다.
반복적인 내용이 많이 있어서 조금 생략했습니다.
7.1 레코드 캡슐화하기
organization = {name:"애크미 구스베리", country: "GB"}
@Getter @Setter
class Organization {
constructor(data) {
this._name = data.name;
this._country = data.country;
}
}
위의 방식은 레코드를 클래스로 만들어서 관리하는 것입니다.
레코드 방식은 필드이름을 노출하는 형식, Map과 Hash같은 자료구조를 일컫는 말입니다.
Map과 Hash같은 경우는 변수명은 지정 할 수 있지만 필드명은 지정이 불가능합니다.
그래서 클래스로 관리하게되면 get,set을 이용하여 캡슐화가 가능해집니다.
그래서 나중에 개발자들 사이에서 알아보기 쉬워 유지보수가 편해진다는 장점이 있습니다.
7.2 컬렉션 캡슐화하기
class Person {
get courses() {return this._courses;}
set courses(aList) {this._courses = aList;}
}
class Person {
get courses() {return this._courses.slice();}
addCourse(aCourse) {...}
removeCourse(aCourse) {...}
}
이 방법은 확실하게 어떤 것이 무엇을 하는지 알 수 있습니다.
그리고 이 컬렉션을 사용할 경우 주의사항은 get은 사용가능하게 하되 다른 부분을 건드는 것은
무조건 복제본을 만들어서 사용해야합니다.
7.3 기본형을 객체로 바꾸기
orders.filter(o => "high" === o.priority || "rush" === o.priority);
orders.filter(o => o.priority.higherThan(new Priority("normal")));
원래 예전에는 정해진 변수형들을 주로 사용했습니다.
그러나 많은 포맷의 변수들이 나오면서 데이터를 전용 클래스로 표현하는게 더 좋습니다.
7.4 임시 변수를 질의 함수로 바꾸기
const basePrice = this._quantity * this._itemPrice;
if (basePrice > 1000)
return basePrice * 0.95;
else
return basePrice * 0.98;
get basePrice() {this._quantity * this._itemPrice;}
...
if (this.basePrice > 1000)
return this.basePrice * 0.95;
else
return this.basePrice * 0.98;
임시 변수를 질의 함수로 바꾸면서 값의 의미를 대신해 설명할 수 있다는 점이 유용합니다.
클래스 내에서 사용하면 훨씬 효율적입니다.
7.5 클래스 추출하기
class Person {
get officeAreaCode() {return this._officeAreaCode;}
get officeNumber() {return this._officeNumber;}
}
class Person {
get officeAreaCode() {return this._telephoneNumber.areaCode;}
get officeNumber() {return this._telephoneNumber.number;}
}
class TelephoneNumber {
get areaCode() {return this._areaCode;}
get number() {return this._number;}
}
7.6 클래스 인라인하기
7.5와 반대로 하시면 됩니다.
7.7 위임 숨기기
manager = aPerson.department.manager;
manager = aPerson.manager;
class Person {
get manager() {return this.department.manager;}
7.8 중개자 제거하기
7.7과 반대로 생각하시면 됩니다.
7.9 알고리즘 교체하기
간소화되어있는 알고리즘을 선택해야 나중에 유지보수가 쉽습니다.
이번 포스팅은 시간이 많이 부족해서 내용이 부실하네요 ㅠㅠ
다음 편은 더 공부해서 돌아오겠습니다.
반응형