Java 예외처리 (Exception Handling)

임유진·2025년 7월 7일

Java

목록 보기
11/12
post-thumbnail

예외

: 프로그램 실행 중 발생할 수 있는 비정상적인 상황

  • 예시

    • 배열 인덱스 초과
    • 0으로 나누기
    • 파일 없음
  • Java 예외 계층

    • Throwable을 상속
    • Checked Exception: 반드시 처리 필요 (IOException, SQLException 등)
    • Unchecked Exception: 실행 시점에 발생, 선택적 처리 (NullPointerException, ArithmeticException 등)

예외 처리 방식

📝 try-catch-finally

  • try 블록: 예외가 발생할 수 있는 코드 작성
  • catch 블록: 예외 발생 시 처리
  • finally 블록: 예외 발생 여부와 관계없이 항상 실행
try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다.");
} finally {
    System.out.println("무조건 실행됩니다.");
}

📝 throws 키워드

  • 메서드 선언부에 throws를 사용하여 예외를 호출한 쪽에 위임
  • 위임 받은 메서드에서 처리해야 함
void readFile() throws IOException {
  FileReader fr = new FileReader("data.txt");
}

다중 예외 처리

여러 예외를 각각 처리하거나, 공통 부모 타입으로 한 번에 처리할 수 있습니다.

try {
  // 예외 발생 가능 코드
} catch (FileNotFoundException e) {
  System.out.println("파일을 찾을 수 없습니다.");
} catch (IOException e) {
  System.out.println("입출력 오류가 발생했습니다.");
}

Java 7 이상에서는 | 연산자로 묶어 처리 가능:

catch (IOException | SQLException e) {
  e.printStackTrace();
}

사용자 정의 예외

기본 예외로 표현하기 어려운 상황에서는 직접 예외 클래스를 생성합니다.

class MyException extends Exception {
  public MyException(String message) {
      super(message);
  }
}

사용 예시:

if (value < 0) {
  throw new MyException("음수는 허용되지 않습니다.");
}

finally 블록

finally는 예외 발생 여부와 무관하게 항상 실행됩니다.

  • 자원 해제
  • 종료 처리
try {
  // 파일 열기
} catch (IOException e) {
  // 예외 처리
} finally {
  // 파일 닫기
}

예외 전파

메서드 내에서 처리되지 않은 예외는 호출한 메서드로 전파됩니다.

  • throws로 위임하지 않으면 반드시 try-catch로 처리해야 함
  • 전파된 예외는 마지막까지 처리되지 않으면 프로그램이 종료됨

📌 전체 요약 표

구분설명
Checked Exception반드시 처리해야 하는 예외 (IOException 등)
Unchecked Exception실행 시 발생, 선택적 처리 (NullPointerException 등)
try-catch-finally예외 처리 및 자원 해제
throws 키워드호출자에게 예외 위임
사용자 정의 예외직접 예외 클래스를 생성해 필요한 상황에 사용
예외 전파처리되지 않은 예외는 호출 스택을 따라 상위 메서드로 전달됨

📚 참고자료

profile
말하는 고구마

0개의 댓글