개요
중복 코드 제거는 중요하다. 당장 문제 없더라도 미래에 요구사항 변경에 따른 코드 수정 시 모든 코드에 반영되지 않을 수 있다는 위험이 존재한다.
예시
실질적으로 같은 메서드 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 있다고 가정 } |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
12 - 상속 다루기 - 생성자 본문 올리기 (0) | 2023.10.27 |
---|---|
12 - 상속 다루기 - 필드 올리기 (0) | 2023.10.26 |
11 - API 리팩터링 - 예외를 사전확인으로 바꾸기 (0) | 2023.09.23 |
11 - API 리팩터링 - 오류 코드를 예외로 바꾸기 (0) | 2023.09.22 |
11 - API 리팩터링 - 수정된 값 반환하기 (0) | 2023.09.21 |