JAVA · 객체지향
default 메서드와 충돌 해결
인터페이스의 default 메서드와 다중 구현 시 충돌 해결 방법입니다.
객체지향중급defaultinterface다이아몬드문제super
핵심 설명
인터페이스의 default 메서드와 다중 구현 시 충돌 해결 방법입니다.
Java code
interface Printable {
default void log(String msg) {
System.out.println("[Print] " + msg);
}
}
interface Loggable {
default void log(String msg) {
System.out.println("[Log] " + msg);
}
}
// 두 인터페이스의 default 메서드 충돌 → 반드시 재정의
class Service implements Printable, Loggable {
@Override
public void log(String msg) {
// 특정 인터페이스의 default 호출
Printable.super.log(msg);
Loggable.super.log(msg);
}
}
// 인터페이스 진화에 활용
interface Collection2 {
// 기존 구현체를 깨지 않고 메서드 추가
default void forEach2(java.util.function.Consumer<Object> action) {
// 기본 구현 제공
}
}
class Main {
public static void main(String[] args) {
Service svc = new Service();
svc.log("테스트"); // 두 인터페이스 모두 호출
}
}학습 팁
default 메서드는 인터페이스 진화(evolution)를 위한 것입니다. 기존 구현체를 수정하지 않고 새 메서드를 추가할 수 있습니다.
주의할 점
두 인터페이스에 같은 시그니처의 default 메서드가 있으면 반드시 구현 클래스에서 재정의해야 합니다. 안 하면 컴파일 에러입니다.
자주 묻는 질문
default 메서드와 충돌 해결란 무엇인가요?
인터페이스의 default 메서드와 다중 구현 시 충돌 해결 방법입니다.
default 메서드와 충돌 해결 학습 시 주의할 점은 무엇인가요?
두 인터페이스에 같은 시그니처의 default 메서드가 있으면 반드시 구현 클래스에서 재정의해야 합니다. 안 하면 컴파일 에러입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.