[Java] 예외 처리(Exception Handling)

icehugger·2026년 4월 15일

training

목록 보기
4/8

1. 에러의 종류 (Error Types)

프로그램 실행 중 발생하는 문제는 발생 시점과 성격에 따라 세 가지로 분류한다.

종류,발생 시점,내용
Syntax Error:컴파일 시,소스 코드가 Java 문법에 어긋날 때 발생 (컴파일 불가)
Runtime Error:실행 중,프로그램 실행 과정에서 발생하는 비정상적 상황 (Exception/Error)
Logic Error:실행 중,"실행은 정상적으로 되나, 개발자의 의도와 다른 결과가 출력됨"

2. 예외 계층 구조 (Exception Hierarchy)

Java는 모든 에러와 예외를 클래스로 관리하며, 최상위 클래스는 java.lang.Throwable이다.

Error (에러): JVM 레벨의 심각한 문제로 프로그램 코드로 수습할 수 없는 상황 (예: OutOfMemoryError)

Exception (예외): 프로그램 코드에서 대응 가능한 문제

Checked Exception: 컴파일러가 예외 처리를 강제함. 처리하지 않으면 컴파일되지 않음 (예: IOException, SQLException)

Unchecked Exception (RuntimeException): 실행 시점에 발생하며, 예외 처리를 강제하지 않음 (예: NullPointerException, ArithmeticException)

3. 예외 처리 구문 (try-catch-finally)

try {
    // 1. 예외 발생 가능성이 있는 로직
} catch (ExceptionType e) {
    // 2. 예외 발생 시 수습 로직 (e.getMessage(), e.printStackTrace() 등으로 원인 파악)
} finally {
    // 3. 예외 발생 여부와 관계없이 항상 실행 (주로 리소스 해제/자원 반납)
}코드를 입력하세요

4. 예외 발생 및 선언 (throw vs throws)

throw: 메서드 내부에서 의도적으로 예외 객체를 발생시킬 때 사용한다.
ex) throw new IllegalArgumentException("메시지");

throws: 메서드 선언부에 사용하며, 해당 메서드를 호출한 쪽으로 예외 처리를 위임(전파)한다.
ex) public void method() throws IOException { ... }

5. 예외의 전파 (Exception Propagation)

메서드 내부에서 발생한 예외가 해당 지점에서 try-catch로 처리되지 않으면, 해당 메서드를 호출한 상위 메서드로 예외 객체가 전달된다. 최종적으로 main() 메서드에서도 처리되지 않을 경우 JVM이 예외를 받아 프로그램을 강제 종료하고 스택 트레이스(Stack Trace)를 출력한다.

6. 주요 메서드

e.getMessage(): 발생한 예외에 대한 간략한 설명 메시지를 반환한다.
e.printStackTrace(): 예외가 발생한 근본적인 원인과 호출 스택의 경로를 상세히 출력한다. (디버깅 시 활용)

0개의 댓글