Closed epicblues closed 2 years ago
해당 링크에서 3번째 코드블럭이 질문 남겨주신 private 내부 클래스를 사용한 골격 구현 확장 케이스 같습니다. 장점은 이렇게 있다고 말해주는데 3번은 제가 이해를 잘 못하겠네욥..ㅎㅎ;;
저희는 인터페이스를 사용해 많은 개발을 하게 됩니다. 만약 이 인터페이스에 구현해야 하는 인터페이스들이 많아진다 한다면 해당 인터페이스를 구현하는 모든 객체에 공통적으로 들어가는 작업을 재정의 할때에 중복코드가 발생할텐데
인터페이스에 몇 가지 공통 메서드가 있는 경우
또다른 장점으로는 132페이지 3번째 문단에 나와있는 문장중
여러분이 만들지 않은 인터페이스에는 디폴트 메서드를 추가할수 없다
따라서 골격 구현 클래스를 이용하면 저희가 만들지 않은 인터페이스에서 디펄트메서드 대용으로 공통적으로 사용할 메서드를 정의할 수 있는것이 장점일 것 같습니다.
@Leeyerimearth 님이 올려주신 링크 잘 봤습니다! 덕분에 대략 어떻게 돌아가는지 이해했습니다.
- If a subclass needs a new implementation of interface, it can do so.
이 부분은 subclass에서 골격 구현 클래스가 재정의한 메서드가 마음에 들지 않을 경우, 그 메서드를 subclass에서 재정의 해서 새롭게 사용하는 것을 의미하는 것으로 봤어요! 링크에 있는 코드와 연관해서 생각해보면 이미 골격 클래스에서 구현에 놓은 start() 메서드를 골격 클래스를 상속받은 Delegator 클래스에서 다시 재정의해서 사용하는 것으로요!
private class AbstractVendingDelegator extends AbstractVending
{
@Override // 무조건 구현해야 하는 메서드
public void chooseProduct() {
System.out.println("Produce diiferent soft drinks");
System.out.println("Choose a type of soft drinks");
System.out.println("pay for drinks");
System.out.println("collect drinks");
}
@Override
public void start()
// 이건 이미 AbstractVending에서 구현했으나
// 이 클래스에 맞게 재정의 하고 싶을 경우!
{
System.out.println("Start VendingMachine Original! bowwow ");
}
}
page 133. 밑에서 4번째 줄부터 쭉
이 부분의 이점(?)을 잘 모르겠습니다. 인터페이스를 구현한 클래스가 골격 클래스가 되고, 내부 클래스가 실제 메서드들을 재정의한 클래스가 되는 건가요?