인터페이스에 기본 메소드를 정의할 수 있나요?
인터페이스에 기본 메소드를 정의할 수 있나요? 전통적으로 자바(Java)에서 인터페이스는 구현할 메소드의 시그니처(메소드 이름, 리턴 타입, 매개변수)만을 선언하고, 실제 구현 내용은 해당 인터페이스를 구현하는 클래스에서 작성하도록 되어 있었습니다.
즉, 인터페이스 내부에는 몸체가 없는 추상 메소드만 선언할 수 있었죠. 하지만 자바 8 버전부터는 인터페이스에 기본 메소드(default method) 를 정의할 수 있는 기능이 추가되었습니다.
기본 메소드란? 기본 메소드란 인터페이스 내부에 `default` 키워드를 이용하여 선언하며, 메소드 구현(몸체)을 포함할 수 있는 메소드입니다.
이를 통해 인터페이스에 새로운 기능을 추가하더라도 기존에 해당 인터페이스를 구현한 클래스들을 반드시 수정하지 않아도 되는 유연성을 제공합니다.
기본 메소드의 특징 - 구현 포함 가능 : 메소드 선언과 함께 구체적인 구현을 포함할 수 있습니다.
- 인터페이스 내에 선언 : `default` 키워드를 사용하여 인터페이스 안에 작성합니다.
- 다중 상속 해결 : 여러 인터페이스에 동일한 기본 메소드가 있는 경우, 클래스에서 직접 구현하여 충돌을 해결해야 합니다.
- 호환성 유지 : 기존 인터페이스에 새로운 메소드를 추가할 때도 기존 구현 클래스에 영향을 주지 않아 하위 호환성을 유지하는 데 유용합니다.
예시 ```java public interface MyInterface { void existingMethod(); default void newDefaultMethod() { System.out.println("This is a default method in the interface"); } } public class MyClass implements MyInterface { @Override public void existingMethod() { System.out.println("Implementation of existing method"); } } public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); obj.existingMethod(); // 기존 메소드 호출 obj.newDefaultMethod(); // 기본 메소드 호출 } } ``` 정리 - 네, 자바 8 이상에서는 인터페이스에 기본 메소드를 정의할 수 있습니다.
- `default` 키워드를 사용하여 메소드의 기본 구현을 인터페이스에 포함시킬 수 있습니다.
- 이를 통해 기존 구현 클래스에 영향을 주지 않고 인터페이스를 확장하는 것이 가능해졌습니다.
이 외에도 자바 8에서는 정적 메소드(static method)도 인터페이스 내에 선언할 수 있도록 지원되고 있습니다.
따라서 인터페이스의 역할과 활용도가 더욱 넓어졌습니다.