Java

[Java]인터페이스의 정적 메서드

DevStory 2022. 6. 27.

인터페이스의 정적 메서드

Java 8 Version에서는 람다식과 Stream API의 추가와 함께 인터페이스의 기본 메서드(default method)와 정적 메서드(static method)를 제공하였습니다.

 

클래스의 정적 메서드와 마찬가지로 인터페이스에서도 정적 메서드를 만들 수 있습니다. 클래스에서 정적 메서드가 호출되는 것처럼 객체를 생성하지 않고 인터페이스의 정적 메서드를 호출할 수 있습니다.


예제 1. 정적 메서드 호출

다음 예제는 인터페이스의 정적 메서드를 구현 클래스 없이 호출합니다.

public interface MyInterface {
  static void show() {
    System.out.println("정적 메서드 호출");
  }
  static int getZero() {
    return 0;
  }
  static String getHello() {
    return "Hello";
  }
}

public class Main {
  public static void main(String args[]) {
    MyInterface.show();
    System.out.println(MyInterface.getZero());
    System.out.println(MyInterface.getHello());
  }
}

실행 결과

정적 메서드 호출
0
Hello

예제 2. 정적 메서드 범위

다음 예제는 인터페이스의 정적 메서드 범위를 보여줍니다. 구현 클래스에서 동일한 이름의 메서드가 구현되면 해당 메서드는 클래스의 정적 멤버가 됩니다.

public interface MyInterface {
  static void show() {
    System.out.println("인터페이스의 show() 메서드");
  }
}

public class Main implements MyInterface {
  // 동일한 이름의 메서드 
  static void show() {
    System.out.println("클래스의 show() 메서드");
  }
    
  public static void main(String args[]) {
    MyInterface.show(); // MyInterface의 정적 메서드
    show();             // Main 클래스의 메서드
  }
}

실행 결과

인터페이스의 show() 메서드
클래스의 show() 메서드

즉, 구현 클래스가 인터페이스의 정적 메서드를 재정의하는 것은 불가능합니다. 따라서 인터페이스의 정적 메서드를 보호합니다.


정리

  • Java 8 Version부터 인터페이스에 정적 메서드를 만들 수 있습니다. 
  • 인터페이스의 정적 메서드는 null 검사, 컬렉션 정렬 등과 같은 유틸리티 메서드를 제공하기 위해 사용할 수 있습니다.
  • 인터페이스의 정적 메서드는 재정의할 수 없습니다.
반응형

댓글