PHpullh
학습 라이브러리/Java/default 메서드와 충돌 해결

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 메서드가 있으면 반드시 구현 클래스에서 재정의해야 합니다. 안 하면 컴파일 에러입니다.