Java

Java Error & Exception

sounglikane 2024. 9. 9. 18:17

1. 예외 (Exception)

  • 정의: 예외는 프로그램 실행 중 발생하는 사건으로, 정상적인 명령 흐름을 방해합니다. 예외는 예측할 수 있고 프로그램에서 처리할 수 있는 조건에 의해 발생하는 경우가 많습니다.
  • 예외의 종류:
    • 체크드 예외(Checked Exceptions): 컴파일 시점에서 체크되는 예외입니다. 프로그래머는 try-catch 블록을 사용하거나 메서드 시그니처에 throws 키워드를 사용하여 이러한 예외를 처리해야 합니다.
      • 예시: IOException, SQLException, ClassNotFoundException
    • 언체크드 예외(Unchecked Exceptions 또는 런타임 예외(Runtime Exception)): 실행 중에 발생하는 예외로, 컴파일 시점에서 체크되지 않습니다. 프로그래머는 명시적으로 처리할 필요는 없지만 필요시 처리할 수 있습니다.
      • 예시: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException
  • 예외 처리:
    • Try-Catch 블록: 예외가 발생할 수 있는 코드를 try 블록으로 감싸고, 예외를 catch 블록에서 처리합니다.
    • Finally 블록: finally 블록은 예외가 발생했는지 여부에 상관없이 항상 실행되어야 하는 코드를 포함합니다.
    • Throws 키워드: 메서드가 발생시킬 수 있는 예외를 선언하여 호출 메서드가 이를 인식하고 처리할 수 있도록 합니다.

 

2. 오류 (Error)

  • 정의: 오류는 일반적으로 응용 프로그램이 처리해서는 안 되는 심각한 문제를 나타냅니다. 이러한 문제는 프로그램의 제어를 벗어난 조건으로 인해 발생하며, 자원 고갈 또는 JVM 수준의 문제로 인해 발생하는 경우가 많습니다.
  • 오류의 종류:
    • OutOfMemoryError: JVM의 메모리가 부족할 때 발생합니다.
    • StackOverflowError: 스택 오버플로우가 발생할 때(보통 깊은 재귀나 무한 재귀로 인해) 발생합니다.
    • VirtualMachineError: OutOfMemoryError와 JVM과 관련된 다른 오류들의 상위 클래스입니다.
  • 오류 처리: 예외와 달리 오류는 일반적으로 프로그램에서 처리하지 않으며, 복구가 불가능한 경우가 많습니다. 대신 프로그램이 종료되어야 한다는 신호로 받아들여집니다.

 

3. 오류와 예외의 주요 차이점

  • 본질: 예외는 일반적으로 복구 가능한 조건을 나타내며, 프로그램에서 처리할 수 있는 상황인 반면, 오류는 프로그램의 제어를 벗어난 심각한 문제를 나타냅니다.
  • 처리: 예외는 프로그램에서 처리하는 경우가 많지만(try-catch 블록 사용), 오류는 심각한 문제를 나타내므로 일반적으로 잡지 않습니다.
  • 계층 구조: 예외와 오류 모두 Throwable의 하위 클래스이지만, 각각 Exception과 Error라는 다른 가지에 속합니다.

 

체인 예외(Chained Exception)의 주요 사용법

  1. 원인 예외를 전달하는 생성자 사용: 새로 발생한 예외에 원래 발생했던 예외를 전달할 수 있습니다.
  2. initCause() 메서드 사용: 예외 객체를 생성한 후에 원인 예외를 설정할 수 있습니다.
  3. getCause() 메서드 사용: 체인된 예외의 원인을 가져올 수 있습니다.

 

 

  1. **method2()**에서는 기본 예외(Exception)가 발생합니다. 이 예외는 "Original exception in method2"라는 메시지를 가집니다.
  2. **method1()**에서 **method2()**를 호출할 때 예외가 발생하면, CustomException을 발생시키고 원래 예외를 체인(원인)으로 포함시킵니다.
  3. CustomException은 "Exception in method1"이라는 메시지와 함께 원인 예외를 전달받아 던져집니다.

 

Throwable 클래스의 체인 예외 관련 메서드

  • Throwable.initCause(Throwable cause): 원인 예외를 설정합니다.
  • Throwable.getCause(): 체인된 예외의 원인을 반환합니다.

체인 예외의 이점

  • 디버깅 용이: 예외가 발생한 이유를 더 명확하게 알 수 있어 디버깅이 용이합니다.
  • 추적 가능성: 여러 단계에 걸친 예외 발생 과정을 추적할 수 있어 문제의 근본 원인을 쉽게 파악할 수 있습니다.

'Java' 카테고리의 다른 글

Java Lambda Expression & Stream API  (0) 2024.09.13
Java Collection Interface  (0) 2024.09.12
Interface, Default, Static, Polymorphism(다형성)  (0) 2024.09.09
Java (접근 제어자, 상속의 개념)  (0) 2024.09.05
Java Class  (0) 2024.09.04