에러(Error)는 컴파일 시 문법적인 오류와 런타임 시 널 포인터 참조와 같은 오류로 프로세스에 심각한 문제를 야기시켜 프로세스를 종료시킬 수 있다.
예외(Exception)은 컴퓨터 시스템의 정상적으로 실행되는 도중 예상하지 못했던 예외적인 조건으로 수행 중인 프로그램이 영향 받는 것이다.
오류와 달리 예외는 try-catch 블록을 사용하는 등 Java 코드에서 적절한 예외 처리를 통해 정상적으로 응답하고, 적절한 오류 메시지를 제공하며, 복구할 수 있다.
그렇다면, Java의 에러는 심각하고, 복구할 수 없는 반면 예외는 복구할 수 있다.
Java에서 예외와 에러는 어떨까?
Throwable
위 그림을 통해 확인할 수 있다시피, Throwable 클래스는 에러와 예외를 나타내는 모든 클래스의 상위 클래스이다.
에러 및 예외를 처리하고 전달하기 위해 공통 인터페이스와 기능을 제공한다.
Error
Error 하위 클래스로는 위 그림 외에도 OutOfMemoryError, StackOverflowError 등이 있다.
Exception
Exception 클래스는 CheckedException과 UncheckedException으로 나눌 수 있다.
Checked Exception은 RuntimeException의 하위 클래스가 아니면서(컴파일 단계에서 발견) Exception 클래스의 하위 클래스인 것들을 말한다. Checked Exception의 특징은 반드시 에러를 처리해야 하는(try/catch or throw)특징이 있다.
그 예로 FileNotFoundException, ClassNotFoundException 등이 있다.
Unchecked Exception은 RuntimeException의 하위 클래스들을 말한다. RuntimeException의 하위 클래스인 만큼 실행 중에 발생할 수 있는 예외로, Checked Exception과 달리 에러 처리를 강제하지 않는다.
그 예로 NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException이 있다.
Checked Exception의 경우에는 예외 발생 시 roll-back 하지 않으나, Unchecked Exception의 경우 roll-back한다.
예외 처리할 때 CheckedException VS Unchecked Exception 선택
보통, 임의의 예외 클래스를 만들어 예외 처리를 하는 경우가 많다.
- 이 때, try-catch로 묶어줄 필요가 있을 경우에만 Exception Class를 확장한다.
- 즉, 예외 복구 전략이 확실할 때?
- 일반적으로 실행 시 예외를 처리할 수 있는 경우에는 RuntimeException 클래스를 확장한다.
- 그러나 Unchecked Exception의 경우 더 구체적으로 발생하여 예외에 대한 내용을 명확하게 한다.
'백엔드 > 에러-예외 처리' 카테고리의 다른 글
Try with Resources / Try Finally (0) | 2024.05.06 |
---|---|
Java - Null 체크 (+ 안정성, 가독성.....) (9) | 2024.04.01 |