Java에서 인터페이스(Interface)는 클래스와 유사하지만, 오직 추상 메소드와 final이며 static인 필드만 포함할 수 있다는 점이 다릅니다.
그러나 Java 8부터는 인터페이스에 정적(static) 메소드와 기본(default) 메소드가 도입되었습니다. 다른 추상 메소드와 달리 이 메소드들은 기본 구현(메소드 본문)을 가질 수 있습니다. 따라서 인터페이스에 기본 메소드가 존재하더라도, 해당 인터페이스를 이미 구현하고 있는 클래스에서 반드시 재정의(오버라이드)할 필요는 없습니다.
즉, 구현 클래스의 객체를 통해 인터페이스의 기본 메소드에 그대로 접근하여 사용할 수 있습니다.
기본 메소드 사용 예제
interface MyInterface{
public static int num = 100;
public default void display() {
System.out.println("display method of MyInterface");
}
}
public class InterfaceExample implements MyInterface{
public static void main(String args[]) {
InterfaceExample obj = new InterfaceExample();
obj.display();
}
}실행 결과
display method of MyInterface
기본 메소드 재정의하기
기본 메소드는 선택 사항이지만, 필요에 따라 구현 클래스에서 인터페이스의 기본 메소드를 자유롭게 재정의(오버라이드)할 수 있습니다. 재정의하면 인터페이스의 기본 구현 대신 클래스에서 작성한 코드가 실행됩니다.
재정의 예제
interface MyInterface{
public static int num = 100;
public default void display() {
System.out.println("display method of MyInterface");
}
}
public class InterfaceExample implements MyInterface{
public void display() {
System.out.println("display method of class");
}
public static void main(String args[]) {
InterfaceExample obj = new InterfaceExample();
obj.display();
}
}실행 결과
display method of class
정리
Java 8 이상에서 인터페이스의 기본 메소드는 구현 클래스에서 재정의해도 되고, 하지 않아도 됩니다. 재정의하지 않으면 인터페이스에 정의된 기본 구현이 실행되며, 재정의하면 클래스의 구현이 우선적으로 호출됩니다.