| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
상속 포기하기
- 서브 클래스가 슈퍼 클래스에서 제공하는 메서드나 데이터를 잘 활용하지 않는다면, 해당 상속 구조는 문제가 있다는 의미이다.
- 관련 리팩토링
- 메서드와 필드 내려주기 -> 슈퍼 클래스에 공동으로 사용하는 기능만 남길 수 있다.
- 슈퍼 클래스 또는 서브 클래스 위임으로 교체하기 -> 서브 클래스가 슈퍼 클래스의 기능을 재사용하고 싶지만 인터페이스를 따르고 싶지 않을 경우
Before
public class Employee {
protected Quota quota;
protected Quota getQuota() {
return new Quota();
}
}
public class Engineer extends Employee {
}
public class Quota {
}
public class Salesman extends Employee {
}
After
public class Employee {
}
public class Engineer extends Employee {
}
public class Quota {
}
public class Salesman extends Employee {
protected Quota quota;
protected Quota getQuota() {
return new Quota();
}
}
=> Quota, getQuota()를 Salesman에서만 사용할 경우 다음과 같이 메서드와 필드 내려주기를 적용할 수 있다.
'클린코드' 카테고리의 다른 글
[Refactoring] 정리 (1) (0) | 2022.09.29 |
---|---|
[Refactoring] 24. 주석 (0) | 2022.09.28 |
[Refactoring] 22. 데이터 클래스 (1) | 2022.09.26 |
[Refactoring] 21. 서로 다른 인터페이스의 대안 클래스들 (1) | 2022.09.25 |
[Refactoring] 20. 거대한 클래스 (0) | 2022.09.24 |