Java Exception & Error 정리 총정리

molamola·2025년 5월 2일

Java

목록 보기
2/2

Java의 예외(Exception)와 오류(Error)는 모두 Throwable 클래스를 상속받으며, 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 처리하기 위해 사용됩니다.


📚 전체 계층 구조

Throwable
├── Exception (예외)
│   ├── CheckedException (체크 예외)
│   └── UncheckedException (언체크 예외, RuntimeException)
└── Error (오류 - 시스템/VM 레벨)

✅ Exception (예외)

1. Checked Exception (컴파일러가 반드시 처리 요구)

예외 클래스설명
IOException입출력 실패 또는 인터럽트 (파일, 네트워크 등)
FileNotFoundException지정한 파일을 찾을 수 없음
SQLExceptionDB 작업 도중 발생하는 예외
ParseException날짜/시간 파싱 오류
ClassNotFoundException클래스 로딩 실패
InterruptedException스레드가 인터럽트됨
NoSuchMethodException지정한 메서드가 존재하지 않음
InstantiationException클래스 인스턴스화 실패

try-catch 또는 throws 선언 필요


2. Unchecked Exception (= RuntimeException 하위 클래스)

예외 클래스설명
NullPointerExceptionnull 객체 접근 시 발생
IllegalArgumentException잘못된 매개변수 전달 시
IndexOutOfBoundsException인덱스 초과 접근 시
NumberFormatException숫자 형식이 잘못됐을 때
ArithmeticException산술 오류 (예: 0으로 나누기)
IllegalStateException잘못된 상태에서 메서드 호출 시
ClassCastException잘못된 타입 변환 시
UnsupportedOperationException구현되지 않은 기능 호출 시

❗ 예외 처리 선택 가능 (throws 없이 사용 가능)


❌ Error (오류 - 거의 처리하지 않음)

오류 클래스설명
OutOfMemoryErrorJVM의 메모리 부족
StackOverflowError스택 오버플로우 (무한 재귀 등)
VirtualMachineErrorJVM 내부 문제 발생
NoClassDefFoundError클래스 정의를 찾을 수 없음
InternalErrorJVM 내부 오류
ThreadDeath스레드 강제 종료

❌ 대부분 try-catch로 처리하지 않고, JVM이 종료되거나 복구 불가 상황


🧠 Exception vs Error vs Throwable 차이

항목ThrowableExceptionError
정의예외/오류의 최상위 클래스개발자가 처리 가능한 예외시스템 수준의 치명적 오류
사용 목적예외나 오류 포괄적 처리로직 오류/외부 문제 처리시스템/메모리 문제 대응
예외 처리 강제 여부-Checked는 강제, Unchecked는 선택거의 처리하지 않음
예시-IOException, NullPointerExceptionOutOfMemoryError

📌 실무에서의 사용 팁

  • 외부 환경(DB, 파일, API 등): Checked Exception → 반드시 처리
  • 내부 로직/개발 실수: Unchecked Exception → 가독성 위해 선택적 처리
  • 시스템 오류: Error → 복구 불가, 보통 로그만 남기고 종료

📎 자주 사용하는 처리 방식

try {
    FileReader reader = new FileReader("data.txt");
} catch (FileNotFoundException e) {
    System.err.println("파일을 찾을 수 없습니다: " + e.getMessage());
}

📘 마무리

자바에서 예외는 단순히 "오류"가 아니라 정상적인 흐름을 벗어난 상태를 통제하기 위한 메커니즘입니다. 예외를 잘 이해하고 적절히 처리하면, 프로그램의 안정성과 유지보수성이 훨씬 향상됩니다.

0개의 댓글