개요
함수 안에서 임시 변수는 그 값을 함수 안에서 다시 사용하거나 값에 명확한 이름을 부여하기 위한 수단이다.
긴 함수를 별도 함수로 추출할 때 변수들이 함수로 만들어져 있으면 수월하다. 추출할 함수에 변수를 따로 전달할 필요가 없기 때문이다.
추가로 추출한 함수와 원래 함수의 경계가 더 분명해진다. 부자연스러운 의존 관계가 제거되기 때문이다.
변수 대신 함수로 만들어 두면, 혹시나 다른 곳에서 같은 방식으로 계산하는 변수를 찾으면 재사용할 기회를 얻는다.
이런 변수는 특히 클래스 내 리팩터링에 효과적이다. 다 같은 문맥을 공유하기 때문이다.
이 리팩터링은 한 번 계산된 뒤에 반드시 읽기만 해야한다.
예시
class Order { constructor(quantity, item){ this._quantity = quantity; this._item = item; } get price(){ var basePrice = this._quantity * this._item.price; var discountFactor = 0.98; if(basePrice>1000) discountFactor -= 0.03; return basePrice * discountFactor; } } |
get price(){ //var const로 바꿔보기 봇보고 지나진 대입문을 찾을 수 있다 const basePrice = this._quantity * this._item.price; var discountFactor = 0.98; if(basePrice>1000) discountFactor -= 0.03; return basePrice * discountFactor; } |
get price(){ const basePrice = this.basePrice(); var discountFactor = 0.98; if(basePrice>1000) discountFactor -= 0.03; return basePrice * discountFactor; } //게터로 추출 get basePrice() { return this._quantity * this._item.price; } |
get price(){ var discountFactor = 0.98; //변수 인라인 if(this.basePrice>1000) discountFactor -= 0.03; return this.basePrice * discountFactor; } |
get price(){ const discountFactor = 0.98; if(this.basePrice>1000) discountFactor -= 0.03; return this.basePrice * discountFactor; } |
get price(){ const discountFactor = this.discountFactor; return this.basePrice * discountFactor; } //게터 추출 get discountFacter() { var discountFactor = 0.98; if (this.basePrice > 1000) discountFactor -= 0.03; return discountFactor; } |
get price(){ return this.basePrice * this.discountFactor; } |
class Order { constructor(quantity, item){ this._quantity = quantity; this._item = item; } get price(){ return this.basePrice * this.discountFactor; } get discountFacter() { var discountFactor = 0.98; if (this.basePrice > 1000) discountFactor -= 0.03; return discountFactor; } get basePrice() { return this._quantity * this._item.price; } } |