언어, 프레임워크/Java
인터페이스 내부 요소
go_getter
2025. 3. 4. 15:23
인터페이스 특징
- 객체 생성 불가 (생성자 없음)
- 다중 구현 가능 (여러개의 인터페이스 구현 가능)
- 기능(행동) 공유 목적
인터페이스 요소
추상 메서드 (abstract method)
- 선언만 가능
- 자동적으로 public abstract
interface Animal {
void makeSound(); // public abstract 생략됨
}
기본 메서드 (default method)
- 자바 8부터
- 인터페이스에서 메서드 직접 구현 가능
- 인터페이스를 구현한 모든 클래스가 이 메서드를 자동 상속 받음
- 구현 클래스가 반드시 구현할 필요 없음 (선택적 오버라이딩 가능)
- 오버라이딩할 경우, 모든 구현 클래스에서 메서드에 접근할 수 있어야 하기 때문에 반드시 접근 지정자를 public으로 지정해야 함
interface Animal {
void makeSound();
default void eat() {
System.out.println("먹이를 먹습니다.");
}
}
정적 메서드 (static method)
- 자바 8부터
- 인터페이스에서 메서드 직접 구현 가능
- 인스턴스 없이 인터페이스 이름으로 바로 호출 가능
interface MathUtil {
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
int sum = MathUtil.add(5, 10); // 직접 호출 가능!
}
}
private 메서드
- 자바 9부터
- 인터페이스 내부에서만 사용 (헬퍼 메서드를 만들 때 사용)
- 기본(default) 메서드나 정적(static) 메서드에서만 호출 가능
interface MyInterface {
// 기본(default) 메서드
default void showMessage() {
System.out.println("✅ 메시지 출력 중...");
log("showMessage 실행됨!");
}
// 정적(static) 메서드
static void showAlert() {
System.out.println("⚠️ 경고 발생!");
log("showAlert 실행됨!");
}
// 인터페이스 내부에서만 사용 가능한 private 메서드
private static void log(String message) {
System.out.println("[LOG]: " + message);
}
}
public class Main {
public static void main(String[] args) {
MyInterface obj = new MyInterface() {}; // 익명 클래스 사용
obj.showMessage(); // ✅ 메시지 출력 중... + [LOG]: showMessage 실행됨!
MyInterface.showAlert(); // ⚠️ 경고 발생! + [LOG]: showAlert 실행됨!
}
}
상수
- 변수는 불가능
- 자동적으로 public static final