prgrms-web-devcourse / BE-Team-preArmand-Book-study

2 stars 2 forks source link

[아이템 21] 디폴트 메서드 #14

Closed Leeyerimearth closed 2 years ago

Leeyerimearth commented 2 years ago

138p. 3번째 문단이 말하는 내용을 하기와 같이 이해했는데, 다들 어떻게 이해하셨는지 궁금합니다 !

한편, 디폴트 메서드는 인터페이스로부터 메서드를 제거하거나 기존 인터페이스의 시그니처를 수정하는 용도가 아님을 명심해야한다. 이런 형태로 인터페이스를 변경하면 반드시 기존 클라이언트를 망가뜨리게 된다.

-> 기존 인터페이스의 메서드를 삭제하고 디폴트 메서드를 추가(구현) -> 이제보니 기존 인터페이스의 메서드의 시그니처가 잘못되어있네, 이 메서드는 삭제하고 시그니처 수정해서 이걸 디폴트 메서드로 추가(구현)

epicblues commented 2 years ago

☠️☠️☠️ 완전 뇌피셜입니다! ☠️☠️☠️

저는 인터페이스가 개발자가 기존 퍼블릭 메서드를 제거하거나 시그니처를 수정하고 싶을 때 디폴트 메서드를 수정/삭제 대상 메서드에 임시로 넣어 놓고(아마도 빈 메서드?) 클라이언트에서 컴파일러 오류를 나게 하지 않기 위한 수단으로 사용하는 것을 금지하라로 해석했습니다.

처음에는 컴파일러 오류가 나지 않을 수도 있으나(기존 구현체들은 해당 디폴트 메서드를 재정의 했을 것이므로) 해당 인터페이스를 구현한 새로운 클래스(재정의를 강제하지 않으므로 비어있는 디폴트 메서드를 가질 가능성이 높은) 를 수정/삭제 전 퍼블릭 메서드에 의존하는 모듈에서 사용할 때 문제가 될 것 같습니다. 텅 빈 디폴트 메서드를 호출하게 될 것이니까요!