1. Exceptions
What Is an Exception?
- 프로그램이 정상 흐름에서 벗어나 중단된 상황을 뜻합니다.
- Java는 예외적인 이벤트나 에러를 핸들링하기 위해 Exception 클래스를 사용합니다.
Exception
- 예외 상황에 대한 정보를 가집니다.
- Exception 인스턴스를 생성해서 JVM에게 전달합니다.
Exception Handling
- 메서드 내에서 에러가 발생 시, JVM으로부터 처리됩니다.
- call stack을 하나씩 내려가면서 처리될 catch 블록을 탐색합니다.
- call stack을 하나씩 내려가면서, 던져진 예외타입에 매칭되는 catch 블록을 순차적으로 탐색합니다.
- 별도로 작성된 서브타입에 대한 예외처리 핸들러를 먼저 작성하여 처리되도록 해야 합니다.
- catch 블록을 찾지못하면 jvm의 default exception handler에 의해 처리됩니다.
The Catch or Specify Requirement
Catching and Handling Exceptions
- try-catch-finally: exception을 처리하기 위한 구문입니다.
- try: exception 발생 가능성이 있는 코드를 포장하는 구문
- catch: exception handler를 작성하는 구문
- 처리할 exception type의 handler를 작성합니다.
- 여러 타입의 예외를 하나의 exception handler로 처리 (vertical bar 사용)(Java 7~)
- finally: 마지막에 언제나 호출되는 구문입니다. (exception 발생 상관 X)
- try-with-resources (Java 7~)
- try 구문 종료 후, 사용되는 resource의 메모리 해제를 자동으로 수행합니다.
- Closeable 인터페이스 구현체만 선언이 가능합니다.
throws 절
- exception propagation
- 해당 메서드의 호출자에게 예외처리 책임을 위임합니다.
- 발생한 예외 처리를 현재 메서드에서 직접 처리하지 않고, 메서드를 호출한 상위 메서드로 전파하여 처리할 수 있습니다.
- 실행 중 발생할 수 있는 Checked Exception을 명시합니다.
- 호출자에게 해당 Checked Exception에 대한 처리를 준비해야 함을 알릴 수 있습니다.
- RuntimeException이 자동으로 추가되어 있습니다. (추가적인 명시 X)
2. How to Throw Exceptions
Throwable Class and Its Subclasses
Throwable
- 모든 에러와 예외의 최상위 클래스입니다.
- 프로그램에서 비정상적인 상황을 나타내기 위한 클래스입니다.
- 하위 클래스로는 Error와 Exception이 있습니다.
Error
- 심각한 문제를 나타낼 때 발생합니다. (애플리케이션 수준 X)
- 일반적으로 애플리케이션에서 처리하지 않으며, 대부분 복구 불가능한 상태를 의미합니다.
StackOverflowError
- JVM 스택메모리가 넘칠 때 발생합니다.
OutOfMemoryError
- 힙 메모리나 메타스페이스 메모리가 부족할 때 발생합니다.
Exception (checked exception)
- 애플리케이션 수준의 문제 발생을 나타냅니다. (시스템의 심각한 문제 X)
- 예측 가능한 예외상황에서 사용됩니다.
- 대체로 외부 요인에 의해 발생하는 예외 입니다.
- 컴파일러에 의해 예외처리가 강제됩니다.
- Exception 클래스 혹은 그 하위 클래스입니다.
IllegalAccessException
- 특정 메서드를 찾을 수 없을 때 발생합니다.
NegativeArraySizeException
- 프로그램이 음수 크기의 배열을 생성하려고 할 때 발생합니다.
RuntimeException (unchecked exception)
- 애플리케이션 수준에서 개발자의 잘못된 API 사용에 대한 예외를 나타냅니다.
- 예측 가능하지 않은 예외상황에서 사용됩니다. (런타임에 발견)
- 컴파일러에 의해 예외처리가 강제되지 않습니다.
- RuntimeException의 하위 클래스입니다.
NullPointerException
- null 참조로 객체의 멤버에 액세스하려고 할 때 발생합니다.
Chained Exceptions
- 한 예외가 다른 예외를 발생시키는 경우에 사용되는 기능입니다.
- 연쇄적인 예외 발생 상황을 효과적으로 처리하기 위해 사용됩니다.
- 특정 상황에서 발생하는 예외가 다른 예외를 일으킬 수 있습니다.
- 예외의 원인이 되는 예외를 함께 전달하여, 예외의 연쇄적인 원인을 쉽게 파악하고 처리할 수 있도록 도와줍니다.
Throwable 생성자
Throwable getCause()
Throwable initCause(Throwable)
Throwable(String, Throwable)
Throwable(Throwable)
- 예외의 원인이 되는 클래스를 전달합니다.
public class ChainedExceptionDemo {
public static void main(String[] args) {
try {
testMethod();
} catch (CustomException e) {
e.printStackTrace();
}
}
public static void testMethod() throws CustomException {
try {
exceptionMethod();
} catch (NumberFormatException e) {
throw new CustomException("Number Format is Incorrect!", e);
}
}
public static void exceptionMethod() {
int num = Integer.parseInt("NotANumber");
}
}
class CustomException extends Exception {
public CustomException(String message, Throwable cause) {
super(message, cause);
}
}
출처
'Java' 카테고리의 다른 글
[Java][Tutorial] 3-3. Collections: Aggregate Operations (0) | 2023.10.20 |
---|---|
[Java][Tutorial] 3-2. Collections: Queue, Deque, Map (0) | 2023.10.15 |
[Java][Tutorial] 3-1. Collections: Collection, Set, List (2) | 2023.10.15 |
[Java][Tutorial] 1-4. Learning the Java Language: Annotation (0) | 2023.10.15 |
[Java][Tutorial] 1-1. Learning the Java Language: Object-Oriented Programming Concepts (1) | 2023.10.15 |