Java 8부터는 인터페이스에 추상 메서드 선언뿐만 아니라 구현체를 제공할 수 있다.
// Ex
public interface Print {
void print();
}
public class Name implements Print {
@Override
public void print() {
System.out.println("Name Class");
}
}
만약 인터페이스에 새로운 추상 메서드가 추가된다면 Print 인터페이스를 구현한 모든 클래스는 이를 구현해 줘야 한다.
public interface Print {
void print();
default void printDefault() {
System.out.println("print Default");
}
}
구현체에서 재정의 가능
default 메서드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다.
컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다.
반드시 문서화할 것. (@implSpec 자바독 태그 사용)
Object가 제공하는 기능 (equals, hasCode)는 default 메서드로 제공할 수 없다.
public interface Print {
static void printStatic() {
System.out.println("print Static");
}
}
public class App{
public static void main(String[] args){
Print.printStatic();
}
}