인터페이스 기본 메서드
인터페이스에 직접 메서드 구현을 추가하여 다중 동작 상속을 가능하게 합니다.
코드 비교
✕ Java 7
// Need abstract class to share behavior
public abstract class AbstractLogger {
public void log(String msg) {
System.out.println(
timestamp() + ": " + msg);
}
abstract String timestamp();
}
// Single inheritance only
public class FileLogger
extends AbstractLogger { ... }
✓ Java 8+
public interface Logger {
default void log(String msg) {
IO.println(
timestamp() + ": " + msg);
}
String timestamp();
}
// Multiple interfaces allowed
public class FileLogger
implements Logger, Closeable { ... }
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
다중 상속
클래스는 단일 추상 클래스 상속과 달리 기본 메서드가 있는 여러 인터페이스를 구현할 수 있습니다.
API 진화
기존 구현을 깨뜨리지 않고 인터페이스에 새 메서드를 추가합니다.
조합 가능한 동작
여러 인터페이스의 기능을 자유롭게 혼합하고 조합합니다.
이전 방식
공유 동작을 위한 추상 클래스
모던 방식
인터페이스의 기본 메서드
JDK 버전
8
난이도
중급
JDK 지원
인터페이스 기본 메서드
사용 가능
JDK 8 (2014년 3월) 이후 사용 가능.
동작 원리
Java 8 이전에는 관련 없는 클래스 간에 동작을 공유하려면 추상 클래스가 필요했으며, 단일 상속으로 제한되었습니다. 기본 메서드는 인터페이스가 메서드 구현을 제공할 수 있게 하여 클래스가 여러 인터페이스에서 동작을 상속받을 수 있습니다.
관련 문서