개요

중복 코드 제거는 중요하다. 당장 문제 없더라도 미래에 요구사항 변경에 따른 코드 수정 모든 코드에 반영되지 않을 있다는 위험이 존재한다.

예시

실질적으로 같은 메서드
class Party{
}
class Employee extends Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
}
class Department extends Party{
    get totalAnnualCost(){
        return this.monthlyCost *12 ;
    }
}


class Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
}
//서브 클래스 중 하나로 이름을 통일하고, 슈퍼 클래스에 메서드를 복사한다.
class Employee extends Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
}
class Department extends Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
}


class Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
}
//정상동작을 확인했다면 서브클래스 메서드를 제거한다.
class Employee extends Party{
}
class Department extends Party{
}


class Party{
    get annualCost(){
        return this.monthlyCost *12 ;
    }
    //Party 슈퍼클래스에서는 서브 클래스에 monthlyCost가 없다.
    //이대로 동작하는 이유는 자바스크립트는 동적언어이기 때문이다.
    //이를 알리기 위해 함정 메서드를 만들어두는 것이 도움된다.
    get monthlyCost(){
        throw new Error("이 값은 서브클래스에서 구현해야합니다.");
    }
}
//정상동작을 확인했다면 서브클래스 메서드를 제거한다.
class Employee extends Party{
    //monthlyCost 있다고 가정
}
class Department extends Party{
    //monthlyCost 있다고 가정
}

 

 

+ Recent posts