JAVA · 객체지향
인터페이스 — default & static & private
Java 8~9에 추가된 인터페이스의 기본 구현, 정적 메서드, private 메서드.
객체지향중급interfacedefaultstaticprivateJava 8
핵심 설명
Java 8~9에 추가된 인터페이스의 기본 구현, 정적 메서드, private 메서드.
Java code
import java.util.Objects;
// 인터페이스 — default, static, private 메서드
public interface Validator<T> {
boolean validate(T value); // 추상 메서드
// default — 공통 구현 제공 (Java 8+)
default boolean isValid(T value) {
return validate(value);
}
// private — 내부 헬퍼 (Java 9+)
private String formatError(String field) {
return "[INVALID] " + field;
}
// static — 팩토리/유틸리티 (Java 8+)
static <T> Validator<T> nonNull() {
return Objects::nonNull;
}
// 다중 Validator 조합
default Validator<T> and(Validator<T> other) {
return value -> this.validate(value) && other.validate(value);
}
default Validator<T> or(Validator<T> other) {
return value -> this.validate(value) || other.validate(value);
}
default Validator<T> negate() {
return value -> !this.validate(value);
}
}
class EmailValidator implements Validator<String> {
@Override
public boolean validate(String email) {
return email != null
&& email.contains("@")
&& email.contains(".");
}
}
class Main {
public static void main(String[] args) {
Validator<String> emailValidator = new EmailValidator();
Validator<String> notEmpty = s -> s != null && !s.isEmpty();
Validator<String> notTooLong = s -> s.length() <= 100;
// 조합
Validator<String> fullValidator =
Validator.<String>nonNull()
.and(notEmpty)
.and(emailValidator)
.and(notTooLong);
System.out.println(fullValidator.isValid("dev@java.io")); // true
System.out.println(fullValidator.isValid("invalid")); // false
System.out.println(fullValidator.isValid(null)); // false
}
}학습 팁
두 인터페이스에 같은 이름의 default 메서드가 있으면 구현 클래스에서 반드시 오버라이드해야 합니다. InterfaceName.super.method()로 특정 인터페이스의 default를 호출할 수 있습니다.
주의할 점
인터페이스의 private 메서드는 Java 9+에서만 사용 가능합니다. Java 8 이하라면 코드 중복을 감수하거나 추상 클래스를 사용해야 합니다.
자주 묻는 질문
인터페이스 — default & static & private란 무엇인가요?
Java 8~9에 추가된 인터페이스의 기본 구현, 정적 메서드, private 메서드.
인터페이스 — default & static & private 학습 시 주의할 점은 무엇인가요?
인터페이스의 private 메서드는 Java 9+에서만 사용 가능합니다. Java 8 이하라면 코드 중복을 감수하거나 추상 클래스를 사용해야 합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.