1. 예외 (Exception)
- 정의: 예외는 프로그램 실행 중 발생하는 사건으로, 정상적인 명령 흐름을 방해합니다. 예외는 예측할 수 있고 프로그램에서 처리할 수 있는 조건에 의해 발생하는 경우가 많습니다.
- 예외의 종류:
- 체크드 예외(Checked Exceptions): 컴파일 시점에서 체크되는 예외입니다. 프로그래머는 try-catch 블록을 사용하거나 메서드 시그니처에 throws 키워드를 사용하여 이러한 예외를 처리해야 합니다.
- 예시: IOException, SQLException, ClassNotFoundException
- 언체크드 예외(Unchecked Exceptions 또는 런타임 예외(Runtime Exception)): 실행 중에 발생하는 예외로, 컴파일 시점에서 체크되지 않습니다. 프로그래머는 명시적으로 처리할 필요는 없지만 필요시 처리할 수 있습니다.
- 예시: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException
- 체크드 예외(Checked Exceptions): 컴파일 시점에서 체크되는 예외입니다. 프로그래머는 try-catch 블록을 사용하거나 메서드 시그니처에 throws 키워드를 사용하여 이러한 예외를 처리해야 합니다.
- 예외 처리:
- Try-Catch 블록: 예외가 발생할 수 있는 코드를 try 블록으로 감싸고, 예외를 catch 블록에서 처리합니다.
- Finally 블록: finally 블록은 예외가 발생했는지 여부에 상관없이 항상 실행되어야 하는 코드를 포함합니다.
- Throws 키워드: 메서드가 발생시킬 수 있는 예외를 선언하여 호출 메서드가 이를 인식하고 처리할 수 있도록 합니다.
2. 오류 (Error)
- 정의: 오류는 일반적으로 응용 프로그램이 처리해서는 안 되는 심각한 문제를 나타냅니다. 이러한 문제는 프로그램의 제어를 벗어난 조건으로 인해 발생하며, 자원 고갈 또는 JVM 수준의 문제로 인해 발생하는 경우가 많습니다.
- 오류의 종류:
- OutOfMemoryError: JVM의 메모리가 부족할 때 발생합니다.
- StackOverflowError: 스택 오버플로우가 발생할 때(보통 깊은 재귀나 무한 재귀로 인해) 발생합니다.
- VirtualMachineError: OutOfMemoryError와 JVM과 관련된 다른 오류들의 상위 클래스입니다.
- 오류 처리: 예외와 달리 오류는 일반적으로 프로그램에서 처리하지 않으며, 복구가 불가능한 경우가 많습니다. 대신 프로그램이 종료되어야 한다는 신호로 받아들여집니다.
3. 오류와 예외의 주요 차이점
- 본질: 예외는 일반적으로 복구 가능한 조건을 나타내며, 프로그램에서 처리할 수 있는 상황인 반면, 오류는 프로그램의 제어를 벗어난 심각한 문제를 나타냅니다.
- 처리: 예외는 프로그램에서 처리하는 경우가 많지만(try-catch 블록 사용), 오류는 심각한 문제를 나타내므로 일반적으로 잡지 않습니다.
- 계층 구조: 예외와 오류 모두 Throwable의 하위 클래스이지만, 각각 Exception과 Error라는 다른 가지에 속합니다.
체인 예외(Chained Exception)의 주요 사용법
- 원인 예외를 전달하는 생성자 사용: 새로 발생한 예외에 원래 발생했던 예외를 전달할 수 있습니다.
- initCause() 메서드 사용: 예외 객체를 생성한 후에 원인 예외를 설정할 수 있습니다.
- getCause() 메서드 사용: 체인된 예외의 원인을 가져올 수 있습니다.
- **method2()**에서는 기본 예외(Exception)가 발생합니다. 이 예외는 "Original exception in method2"라는 메시지를 가집니다.
- **method1()**에서 **method2()**를 호출할 때 예외가 발생하면, CustomException을 발생시키고 원래 예외를 체인(원인)으로 포함시킵니다.
- 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 |