Interview Q&A Weekend Series #1 🚀 | Abstract vs Default Method Conflict Explained @Javatechie
- 두 인터페이스가 동일한 시그니처의 추상 메서드를 가질 때, 구현 클래스는 해당 메서드를 한 번만 구현하면 두 인터페이스의 계약을 모두 만족시킵니다. 자바는 특정 인터페이스에서 오버라이드한다고 보지 않고, 단순히 계약을 이행하는 것으로 간주합니다. 🤝
- 두 인터페이스가 동일한 시그니처의 디폴트 메서드를 가질 때, 자바는 어떤 구현을 상속받아야 할지 혼란스러워합니다. 이 모호성을 해결하기 위해 구현 클래스는 해당 디폴트 메서드를 반드시 오버라이드해야 합니다. 🤯
- 디폴트 메서드 충돌로 인해 오버라이드할 경우, 개발자는 자신만의 새로운 로직을 구현하거나,
InterfaceName.super.methodName()을 사용하여 특정 인터페이스의 디폴트 구현을 호출하거나, 둘을 조합할 수 있습니다. 🛠️
- 인터뷰어는 종종 "어떤 인터페이스에서 오버라이드되었는가?"와 같은 질문으로 혼란을 주려 합니다. 추상 메서드의 경우 단일 구현으로 양쪽을 만족시키며, 디폴트 메서드의 경우 모호성 때문에 강제로 오버라이드해야 함을 명확히 설명해야 합니다. 🧠
- 핵심 차이점은 추상 메서드는 본문이 없어 자바가 혼란스러워할 여지가 없지만, 디폴트 메서드는 본문이 있어 어떤 것을 선택해야 할지 자바가 결정할 수 없어 구현 클래스에 해결을 강제한다는 것입니다. ⚖️
데브허브 | DEVHUB | Interview Q&A Weekend Series #1 🚀 | Abstract vs Default Method Conflict Explained @Javatechie