IT책, 강의/리팩터링
12 - 상속 다루기 - 메서드 올리기
제로칼로리
2023. 10. 9. 16:41
개요
중복 코드 제거는 중요하다. 당장 문제 없더라도 미래에 요구사항 변경에 따른 코드 수정 시 모든 코드에 반영되지 않을 수 있다는 위험이 존재한다.
예시
실질적으로 같은 메서드 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 있다고 가정 } |