[JAVA8] 인터페이스 기본 메소드와 스태틱 메소드

이재훈·2023년 5월 3일
0

JAVA8

목록 보기
3/23

인프런 강의 "더 자바, JAVA8"(백기선님)의 강의를 듣고 정리한 글 입니다.
JAVA8에 추가된 핵심 기능들을 이해하기 쉽게 설명해 주시니 한번씩 들어보시는 것을 추천드립니다.

"더 자바, JAVA8 바로가기"


인터페이스를 작성했습니다.

public interface MyInterface {

    void printName();
    
}

MyFoo 클래스는 해당 인터페이스를 구현하고 있습니다.

public class MyFoo implements MyInterface{

    @Override
    public void printName() {
        System.out.println("myFoo = " + "myFoo");
    }

}

여기서 인터페이스에 새로운 메서드가 추가된다면 ?

public interface MyInterface {

    void printName();

    void printNameUppercase(); // 추가
}

이 인터페이스를 구현하는 모든 클래스들을 고쳐야 합니다.
구현한 클래스를 고치지 않고 인터페이스에 메서드를 추가하는 방법은 아래와 같습니다.

public interface MyInterface {

    void printName();

    default void printNameUppercase() {
        System.out.println("printNameUppercase");
    };
}

기본 메서드 (Default Methods)

  • 인터페이스에 메서드 선언이 아니라 구현체를 제공하는 방법
  • 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다.
  • 기본 메서드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다.
    - 컴파일러 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다.
    - 반드시 문서화 할것. (@implSpec 자바독 태그 사용)
  • Object가 제공하는 기능 (equals, hasCode)는 기본 메서드로 제공할 수 없다.
    - 구현체가 재정의 해야한다.
  • 본인이 수정할 수 있는 인터페이스만 기본 메소드를 제공할 수 있다.
  • 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있다.
  • 인터페이스 구현체가 재정의 할 수도 있다.
profile
부족함을 인정하고 노력하자

0개의 댓글