인터페이스 private 메서드
private 메서드를 사용하여 인터페이스에서 공유 로직을 추출합니다.
코드 비교
✕ Java 8
interface Logger {
default void logInfo(String msg) {
System.out.println(
"[INFO] " + timestamp() + msg);
}
default void logWarn(String msg) {
System.out.println(
"[WARN] " + timestamp() + msg);
}
}
✓ Java 9+
interface Logger {
private String format(String lvl, String msg) {
return "[" + lvl + "] " + timestamp() + msg;
}
default void logInfo(String msg) {
IO.println(format("INFO", msg));
}
default void logWarn(String msg) {
IO.println(format("WARN", msg));
}
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
코드 재사용
중복 없이 default 메서드 간에 로직을 공유합니다.
캡슐화
구현 세부 사항이 구현 클래스에 숨겨집니다.
DRY 인터페이스
더 이상 default 메서드 간에 복붙이 없습니다.
이전 방식
로직 중복
모던 방식
private 메서드
JDK 버전
9
난이도
중급
JDK 지원
인터페이스 private 메서드
사용 가능
JDK 9 (2017년 9월) 이후 널리 사용 가능
동작 원리
Java 9는 인터페이스에서 private 메서드를 허용하여 구현 클래스에 구현 세부 사항을 노출하지 않고 default 메서드 간에 코드를 공유할 수 있습니다.
관련 문서