Interface default method

By | 2021년 2월 3일
Table of Content

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);
  } 
  // ...
}

실제로는?

실제 사용해 보면 멤버변수 없는 추상 클래스와 유사하게 사용할 수 있다.

이를 이용해 다중 상속을 구현할 수도 있어 유용하다.
(의도된 사용법은 아니겠지만 실제로 필요한 기능이라 쓰게 된다.)

답글 남기기