카테고리 없음

리팩터링 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 알고리즘 교체하기

간소화되어있는 알고리즘을 선택해야 나중에 유지보수가 쉽습니다.

 

 

이번 포스팅은 시간이 많이 부족해서 내용이 부실하네요 ㅠㅠ

다음 편은 더 공부해서 돌아오겠습니다.

반응형