JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[Effective Java] Item 20. 단순 구현(simple implementation) #11

Closed kjsu0209 closed 3 years ago

kjsu0209 commented 3 years ago

135p에서 AbstactMap.SimpleEntry가 인터페이스를 구현한 골격 구현(단순 구현)이지만 추상 클래스가 아니라고 합니다. 그러면 단순 구현은 일반 클래스로 인터페이스를 구현하는 걸 말하나요? 아니면 인터페이스에서 디폴트 메서드만으로도 구현이 가능할 때 단순 구현이라고 하나요?

jth2747 commented 3 years ago

AbstractMap.SimpleEntry API를 잘 살펴보시면, java.util.Map.Entry에서 comparingByKey, comparingByKey, comparingByValue, comparingByValue를 각각 상속받아서 구현하고 있습니다. java.util.Map.Entry를 확인해보시면 각 4개의 메소드가 default 메소드인 것을 알 수 있습니다. 이것과 책에서 단순 구현의 개념을 참고해보면, AbstractMap.SimpleEntry가 java.util.Map.Entry를 추상 클래스로 두지 않으며 디폴트 메서드만으로도 정말 단순하게 구현이 가능한 것을 단순 구현이라고 하는 것 같습니다.

단순 구현의 정보가 잘 나오지 않아서, API를 참고하고 개념을 다시 읽어보니 감이 왔는데, 혹시 잘못 정의 내린것이라면 정정 부탁드립니다! https://docs.oracle.com/javase/8/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true

kjsu0209 commented 3 years ago

문서 보니까 SimpleEntry가 AbstractMap을 추상 클래스로 두는데 AbstractMap만 골격 구현이라고 이해하면 될까요?

jth2747 commented 3 years ago

네, AbstractMap은 Map 인터페이스의 골격 구현을 제공한다고 되어 있습니다. AbstractMap은 Map의 골격 구현이라고 보고 SimpleEntry는 AbstractMap을 추상 클래스로 두나 Map.Entry를 추상 클래스로 두지 않고 Map.entry의 디폴트 메서드들만을 단순 구현한 것 같습니다..