자바(Java) 8부터는 인터페이스 내부에 정적(static) 메서드를 직접 정의할 수 있습니다. 정적 메서드는 객체 생성 없이 인터페이스 이름을 통해 바로 호출할 수 있으며, 유틸리티성 기능을 인터페이스 안에 함께 제공할 때 유용하게 활용됩니다.
아래 예제를 통해 인터페이스에서 정적 메서드를 구현하는 방법을 살펴보겠습니다.
예제 코드
interface my_interface{
static void static_fun(){
System.out.println("In the newly created static method");
}
void method_override(String str);
}
public class Demo_interface implements my_interface{
public static void main(String[] args){
Demo_interface demo_inter = new Demo_interface();
my_interface.static_fun();
demo_inter.method_override("In the override method");
}
@Override
public void method_override(String str){
System.out.println(str);
}
}
실행 결과
In the newly created static method In the override method
코드 설명
위 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
- 인터페이스 정의: my_interface 안에 static_fun()이라는 정적 메서드를 선언하고, 본문(메서드 몸체)이 없는 추상 메서드 method_override(String str)도 함께 정의합니다.
- 구현 클래스 작성: Demo_interface 클래스가 implements 키워드를 사용해 my_interface 인터페이스를 구현합니다.
- main 메서드 실행: Demo_interface의 인스턴스를 생성한 뒤, 정적 메서드는 인터페이스 이름으로 직접 호출(my_interface.static_fun())하고, 일반 메서드는 생성된 객체를 통해 호출합니다.
- @Override 어노테이션: 인터페이스의 추상 메서드를 재정의했음을 명시하며, 이 메서드는 매개변수로 전달받은 문자열을 콘솔에 그대로 출력합니다.
주의할 점
인터페이스의 정적 메서드는 반드시 인터페이스이름.메서드명() 형태로만 호출해야 하며, 구현 클래스의 객체를 통해서는 호출할 수 없습니다. 또한 정적 메서드는 구현 클래스에 상속되지 않기 때문에, 구현 클래스에서 같은 시그니처의 메서드를 새로 정의하더라도 이는 오버라이드가 아니라 완전히 별개의 새로운 메서드로 취급됩니다.