Language/Java

Java 8 - 인터페이스의 default method, static method 사용!

JaeHoney 2022. 3. 9. 20:37

자바8 버전부터는 인터페이스에서 Default methodStatic method를 사용할 수 있습니다.

 

개인적으로는 클래스랑 인터페이스의 경계가 조금 허물어지는게 아닌가.. 하고 조금 의아하기도 했습니다.

 

하나씩 살펴봅시다.

Default method

기본 메소드(default method)는 interface에서 메서드 내용을 정의하고, 그대로 재사용할 수 있게 해줍니다.

public interface Printer {

    String getName();
    
    default void printNameUpperCase() {
        System.out.println(getName().toUpperCase());
    }
    
}

public class HoneyPrinter implements Printer {
    
    @Override
    public String getName() {
        return "Honey";
    }
    
}

Printer 인터페이스를 보시면, printNameUpperCase의 동작을 정의하고 있습니다. java8부터 default 키워드를 붙임으로써 가능합니다.

 

구현체는 인터페이스에서 default method로 정의한 메서드를 재사용할 수 있습니다. 그러면 이걸 왜 사용하는 걸까요?

  • 자바는 다중 상속이 불가능합니다.
  • 그래서 다중 상속 대신 인터페이스를 추가 구현합니다.
    • 여기서 모든 인터페이스의 구현체에서 해당 메서드를 구현해야되는 문제가 발생합니다.

 

주의할 점은 구현체에서 인터페이스의 default method의 기능을 모른다는 점입니다. Effective Java에서는 인터페이스의 default method의 경우 반듭시 반드시 문서화를 하는 것을 권장합니다.

/**
* @implSpec
* 이 구현체는 getName()으로 가져온 문자열을 대문자로 바꿔 출력한다.
*/
default void printNameUpperCase() {
    System.out.println(getName().toUpperCase());
}

Static method

Java8부터 interface도 클래스처럼 정적메서드를 정의할 수 있습니다. (static method는 구현체에서 재정의할 수 없습니다.)

public interface Printer {
    
    static void printHello() {
        System.out.println("hello");
    }

}

아래와 같이 클래스의 정적메서드 사용하듯이 사용할 수 있습니다.

public static void main(String[] args) {
    Printer.printHello();
}

마무리

Java8의 interface 변화는 자바를 자유도가 높은 언어로써 사용하기 위한 부분이라고 합니다!

 

감사합니다.


 

출처 : 더 자바, Java 8 - 인프런 백기선님 강의
 

더 자바, Java 8 - 인프런 | 강의

자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이

www.inflearn.com