개요

함수 안에서 임시 변수는 값을 함수 안에서 다시 사용하거나 값에 명확한 이름을 부여하기 위한 수단이다.

 

함수를 별도 함수로 추출할 변수들이 함수로 만들어져 있으면 수월하다. 추출할 함수에 변수를 따로 전달할 필요가 없기 때문이다.

추가로 추출한 함수와 원래 함수의 경계가 분명해진다. 부자연스러운 의존 관계가 제거되기 때문이다.

 

변수 대신 함수로 만들어 두면, 혹시나 다른 곳에서 같은 방식으로 계산하는 변수를 찾으면 재사용할 기회를 얻는다.

 

이런 변수는 특히 클래스 리팩터링에 효과적이다. 같은 문맥을 공유하기 때문이다.

 

리팩터링은 계산된 뒤에 반드시 읽기만 해야한다.

예시



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;
    }
}

 

+ Recent posts