본문 바로가기

클린코드

[Refactoring] 23. 상속 포기하기

 

코딩으로 학습하는 리팩토링 - 인프런 | 강의

리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직

www.inflearn.com

| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.


상속 포기하기
  • 서브 클래스가 슈퍼 클래스에서 제공하는 메서드나 데이터를 잘 활용하지 않는다면, 해당 상속 구조는 문제가 있다는 의미이다.
  • 관련 리팩토링
    • 메서드와 필드 내려주기 -> 슈퍼 클래스에 공동으로 사용하는 기능만 남길 수 있다.
    • 슈퍼 클래스 또는 서브 클래스 위임으로 교체하기 -> 서브 클래스가 슈퍼 클래스의 기능을 재사용하고 싶지만 인터페이스를 따르고 싶지 않을 경우
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에서만 사용할 경우 다음과 같이 메서드와 필드 내려주기를 적용할 수 있다.