🧩 디폴트 메서드 (Default Method)
📌 왜 필요하지?
- 기존 인터페이스는 모든 메서드를 반드시 오버라이딩해야 한다
- 예:
Filter
인터페이스에 메서드가 3개 있으면, 실제로 1개만 필요해도 3개 전부 구현해야 함 → 낭비
- 디폴트 메서드는 선택적 오버라이딩이 가능 → 인터페이스에 유연성 부여
✅ 특징
default
키워드
- 인터페이스 내에서도 메서드 구현부 작성 가능
- 기본 구현 제공 → 필요 시 오버라이딩 가능
- 기존 인터페이스에 기능을 추가할 때 하위 호환성 유지
interface Filter {
default void init() {
System.out.println("기본 초기화");
}
void process();
}
⚠️ 주의!
- "기존 메서드 추가"와 뭐가 다르냐? → 인터페이스는 원래 구현 불가, 디폴트는 예외
- 너무 사용하면 클래스 간 충돌 발생 가능성 UP
🛠 예외 처리 (Exception Handling)
📌 오류 종류
구분 | 설명 |
---|
컴파일 오류 | 코드 작성 중 발생하는 문법 오류 (; , {} , 타입 등) |
실행 오류 | 프로그램 실행 중 발생, 예외(Exception) 또는 에러(Error) |
⚠️ 예외 vs 에러
구분 | 설명 |
---|
에러 (Error) | JVM 내부에서 발생하는 치명적인 문제. 예외 처리 불가. 대부분 프로그램 종료 |
예외 (Exception) | 자바 코드에서 발생하는 오류. 개발자가 처리 가능 |
🎯 예외의 두 가지 유형
유형 | 설명 | 예외 처리 여부 |
---|
일반 예외 (Checked) | 컴파일러가 예외 처리 강제 요구 | 반드시 처리 (try-catch 또는 throws ) |
런타임 예외 (Unchecked) | 실행 중 발생, 컴파일러 확인 X | 처리 선택적 |
🧪 try-catch-finally 구조
try {
} catch (예외클래스 변수명) {
} catch (다른 예외클래스 변수명) {
} finally {
}
catch
블럭은 여러 개 작성 가능 (위에서 아래 순서로 검사)
finally
는 생략 가능
✅ 예시
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} finally {
System.out.println("예외 발생 여부와 관계없이 실행됩니다.");
}