Table of Contents
Interface default method
디폴트 메소드가 무엇인가?
interface
에서 코드를 가지는 메소드를 추가할 수 있다.
public interface IPrinterable {
public void print();
public default void cancel(){
System.out.println("Printer Cancel");
};
}
인터페이스에 왜 코드를 추가할까?
이미 구현 클래스가 많은 인터페이스에 메소드를 추가하려면, 구현 클래스 모두를 수정해야만 한다.
코드를 가지는 디폴트 메소드로 추가하게 되면, 구현 클래스의 수정없이(오류없이) 새로운 메소드를 추가할 수 있다.
일반 클래스처럼 @Override
를 이용해 메소드를 새로 구현할 수도 있다.
사용예시
자연스럽게 Collection
을 확장하고 있다.
public interface Collection<E> extends Iterable<E> {
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
// ...
}
실제로는?
실제 사용해 보면 멤버변수 없는 추상 클래스와 유사하게 사용할 수 있다.
이를 이용해 다중 상속을 구현할 수도 있어 유용하다.
(의도된 사용법은 아니겠지만 실제로 필요한 기능이라 쓰게 된다.)