너도 예외(Exception)처리 할 수 있어!

현정재·2024년 7월 8일
0

Java 예외 처리

예외(Exception)는 프로그램 실행 도중 예기치 않은 상황이 발생했을 때 이를 처리하기 위해 사용됩니다. 예외는 프로그램의 정상적인 흐름을 방해하지 않고, 오류 상황을 처리할 수 있도록 도와줍니다. 이 글에서는 예외의 개념, 상속 구조, 주요 예외 클래스, 예외 처리 방법 등에 대해 설명하겠습니다.

예외의 개념

  1. 예외(Exception): 프로그램 실행 중에 발생하는 오류나 비정상적인 상태를 의미합니다. 예외가 발생하면 프로그램의 실행이 중단되고, 예외 처리기가 이를 처리할 수 있습니다.
  2. 예외 처리(Exception Handling): 예외가 발생했을 때 이를 적절히 처리하여 프로그램의 비정상 종료를 방지하는 방법입니다. try, catch, finally 블록을 사용하여 예외를 처리합니다.

예외 클래스의 상속 구조

Java의 예외 클래스는 계층적 구조로 되어 있으며, 모든 예외 클래스는 Throwable을 기본 클래스로 상속받습니다. 주요 예외 클래스와 그 하위 클래스들은 다음과 같습니다.

  1. Throwable

    • 모든 예외와 오류의 최상위 클래스입니다.
  2. Exception

    • 대부분의 사용자 정의 예외는 이 클래스를 상속받아 정의합니다. Exception 클래스는 대부분의 표준 예외 클래스의 기본 클래스입니다.
  3. RuntimeException

    • 실행 중에 발생하는 예외로, 명시적으로 처리하지 않아도 됩니다.
    • NullPointerException: 객체 참조가 없을 때 발생
    • IndexOutOfBoundsException: 인덱스가 범위를 벗어날 때 발생
    • IllegalArgumentException: 부적절한 인자가 전달되었을 때 발생
  4. IOException (입출력 예외)

    • FileNotFoundException: 파일을 찾을 수 없을 때 발생
    • EOFException: 파일 끝에 도달했을 때 발생
  5. SQLException (SQL 관련 예외)

    • 데이터베이스 접근 중 오류 발생
  6. ClassNotFoundException

    • 클래스를 찾을 수 없을 때 발생
  7. InterruptedException

    • 스레드가 대기, 수면, 조인 중에 인터럽트 되었을 때 발생

예외 처리 방법

Java에서는 try 블록을 사용하여 예외가 발생할 가능성이 있는 코드를 감싸고, catch 블록을 사용하여 예외를 처리합니다.

try {
    // 예외가 발생할 가능성이 있는 코드
    int result = 10 / 0;
} catch (ArithmeticException e) {
    // 예외가 발생했을 때 실행할 코드
    System.out.println("0으로 나눌 수 없습니다.");
} finally {
    // 예외 발생 여부와 상관없이 항상 실행할 코드
    System.out.println("프로그램 종료");
}

사용자 정의 예외

사용자 정의 예외는 Exception 클래스를 상속받아 정의합니다.

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

try {
    throw new MyCustomException("이것은 사용자 정의 예외입니다.");
} catch (MyCustomException e) {
    System.out.println(e.getMessage());
}

예외 전파

예외는 상위 호출 스택으로 전파될 수 있습니다. 메소드 내에서 예외가 처리되지 않으면 해당 메소드를 호출한 위치로 예외가 전달됩니다.

public void method1() throws MyCustomException {
    throw new MyCustomException("에러 발생");
}

public void method2() {
    try {
        method1();
    } catch (MyCustomException e) {
        System.out.println("method2에서 예외 처리: " + e.getMessage());
    }
}

method2();

예외 체인

Java에서는 예외 체인(Exception Chaining)을 통해 하나의 예외가 다른 예외의 원인이 되었음을 나타낼 수 있습니다. throw 구문에 예외를 포함하여 예외 체인을 구성합니다.

try {
    throw new IllegalArgumentException("기본 예외");
} catch (IllegalArgumentException e) {
    throw new RuntimeException("다른 예외 발생", e);
}

예외 재발생

때때로 예외를 처리한 후 다시 발생시켜야 할 필요가 있습니다. 이는 예외를 부분적으로 처리하고, 나머지는 상위 코드에서 처리하도록 할 때 유용합니다.

try {
    try {
        int result = 10 / 0;
    } catch (ArithmeticException e) {
        System.out.println("처리된 예외: " + e.getMessage());
        throw e;  // 예외를 다시 발생시킴
    }
} catch (ArithmeticException e) {
    System.out.println("최종 처리: " + e.getMessage());
}
profile
wonttock

0개의 댓글