인터페이스에 추상 메소드가 아닌 구현 메소드를 정의 하는 것
해당 인터페이스를 구현한 클래스들을 깨트리지 않고 메소드를 추가할 수 있다.
인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있다.
구현체가 재정의 할 수 있다.
구현체에 따라 런타임 에러가 발생할 수 있다.
문서화를 잘 해놓아야 한다.
같은 디폴트 메소드를 구현한 인터페이스를 2개 이상 구현하였을 경우엔 자바 컴파일러가 어떤 디폴트 메소드를 사용할지 판단할 수 없으므로 컴파일 에러를 발생시키게 되고, 무조건 디폴트 메소드를 재정의 해야한다.
interface Foo {
default void print() {
System.out.println("foo");
}
}
interface Bar {
default void print() {
System.out.println("bar");
}
}
class Impl implements Foo, Bar {
// 재정의 하지 않으면 컴파일 에러 발생!!
@Override
public void print() {
System.out.println("implement");
}
}