Closed ssstopeun closed 1 year ago
제가 이해한대로 작성해봤습니다
먼저, 리팩토링 전 코드입니다.
public class MyClass {
public void methodA() {
doSomething();
}
public void methodB() {
doSomething();
}
public void doSomething() {
System.out.println("뭔가 계산하는 로직 암튼 그럼");
}
}
여기서, doSomething()
메서드가 재정의 가능 메서드
입니다. methodA
와 methodB
도 얘를 사용하므로 하위 클래스에서 doSomething()
을 맘대로 재정의하면 두 메서드의 동작에 문제가 생길 수 있습니다.
따라서,
하도록 리팩토링 할 수 있습니다.
public class MyClass {
public void methodA() {
doSomethingHelper();
}
public void methodB() {
doSomethingHelper();
}
public void doSomething() {
doSomethingHelper();
}
private void doSomethingHelper() {
System.out.println("뭔가 계산하는 로직 암튼 그럼");
}
}
이렇게 되면, 하위 클래스에서는 doSomethingHelper()
를 재정의할 수 없으므로 상위 클래스에서의 methodA()
와 methodB()
의 동작은 우선 문제가 발생하지 않습니다. 하위 클래스에서 doSomething()
을 재정의해서 사용한다고 해도 상위 클래스에는 영향을 주지 않으므로 클래스의 동작을 유지하면서 재정의 가능 메서드를 사용하는 코드를 제거
할 수 있게 됩니다.
p.128에서
이 부분이 잘 이해가 가지 않아 예시 코드가 궁금합니다.