개요

하나의 레코드에서 갑을 여러 꺼내서 인수로 넘길 바에 레코드 자체를 넘기는게 좋다

 

이점으로 매개변수 목록이 짧아지고, 수정될 가능성이 낮아진다.

 

, 함수가 레코드에 의존하게 되므로, 서로 다른 모듈일 경우 리팩터링을 하지 않는다.

 

예시

실내온도 모니터링 시스템

function example(){
    const low = aRoom.datsTempRange.low;
    const high = aRoom.datsTempRange.high;
    if(!aPlan.withinRange(low,high))
        alerts.push("방온도가 지정 범위를 벗어났습니다.");
}
class HeatingPlan{
    withinRange(bottom, top){
        return (bottom >= this._temperatureRange.low)
            && (top <= this._temperatureRange.high);
    }
}
class HeatingPlan{
    withinRange(bottom, top){
        return (bottom >= this._temperatureRange.low)
            && (top <= this._temperatureRange.high);
    }
    //기존 메서드 대체할 빈 메서드 생성
    xxNEWwithinRange(aNumberRange){
    }
}
class HeatingPlan{
    withinRange(bottom, top){
        return (bottom >= this._temperatureRange.low)
            && (top <= this._temperatureRange.high);
    }
    //기존 메서드 호출코드 추가
    xxNEWwithinRange(aNumberRange){
        return this.withinRange(aNumberRange.low, aNumberRange.high);
    }
}
function example(){
    //기존 함수 호출하는 곳 새 함수 호출로 변경
    if(!aPlan.xxNEWwithinRange(aRoom.datsTempRange))
        alerts.push("방온도가 지정 범위를 벗어났습니다.");
}
function example(){
    //기존 함수 호출하는 곳 새 함수 호출로 변경
    if(!aPlan.withinRange(aRoom.datsTempRange))
        alerts.push("방온도가 지정 범위를 벗어났습니다.");
}
class HeatingPlan{
    withinRange(aNumberRange){
        return (aNumberRange.low >= this._temperatureRange.low)
            && (aNumberRange.high <= this._temperatureRange.high);
    }
}

 

예시: 함수를 다른 방식으로 만들기

변형된 방법, 코드 작성 없이 다른 리팩터링을 연달아 수행하여 메서드 생성

function example(){
    const low = aRoom.daysTempRange.low;
    const high = aRoom.daysTempRange.high;
    if(!aPlan.withinRange(low,high))
        alerts.push("방 온도가 지정 범위를 벗어났습니다.");
}

function example(){
    const low = aRoom.daysTempRange.low;
    const hihg = aRoom.daysTempRange.high;
    const isWithinRange = aPlan.withinRange(low, high);
    if(!isWithinRange)
        alerts.push("방 온도가 지정 범위를 벗어났습니다.");
}


function example(){
    const tempRange = aRoom.daysTempRange;
    const isWithinRange = xxNEWwithinRange();
    //함수 추출하기
    function xxNEWwithinRange() {
        const low = tempRange.low;
        const high = tempRange.high;
        const isWithinRange = aPlan.withinRange(low, high);
        if (!isWithinRange)
            alerts.push("방 온도가 지정 범위를 벗어났습니다.");
        return isWithinRange;
    }
}
function example(){
    const tempRange = aRoom.daysTempRange;
    const isWithinRange = aPlan.xxNEWwithinRange();
    if (!isWithinRange)
            alerts.push("방 온도가 지정 범위를 벗어났습니다.");
}
class HeatingPlan{
    //함수 옮기기
    xxNEWwithinRange() {
        const low = tempRange.low;
        const high = tempRange.high;
        const isWithinRange = aPlan.withinRange(low, high);
        return isWithinRange;
    }
}

 

+ Recent posts