자바의 예외 계층 구조는 다음과 같다.
오늘은 여기서 Checked Exception과 Unchecked Exception에 대해 알아보자.
Checked Exception
Checked Exception은 컴파일 시점에 확인되며, 반드시 처리해야 하는 예외이다. `Exception` 클래스를 상속하지만 `RuntimeException`을 상속하지 않은 모든 예외이다. 반드시 처리해야 하므로 try-catch문으로 예외를 처리하거나 throws를 선언해 호출자에게 예외를 위임한다.
Unchecked Exception
Unchecked Exception은 런타임 시점에 발생하며, 컴파일러가 처리 여부를 강제하지 않는다. `RuntimeException`을 상속하는 모든 예외이다. `Error`와 그 하위 클래스도 Unchecked이다. 주로 프로그래밍 오류를 나타낸다.
각각 언제 사용해야 할까?
Checked Exception은 복구가 가능한 상황에서 사용한다. 예외 상황이 발생해도 프로그램이 다른 방법을 통해 정상적인 실행을 계속할 수 있는 경우이다. 또, 외부 리소스와의 상호작용에서 발생할 가능성이 높은 예외에 적합하다. 이러한 예외는 예측이 가능하며, 호출하는 쪽에서 적절히 처리할 수 있는 여지가 있다.
Unchecked Exception은 코드 오류, 논리적 결함 등 프로그래머의 실수로 인해 발생할 수 있는 예외에 사용한다. 코드의 오류나 논리적 결함은 코드가 예외를 예방하거나 대비할 방법이 없다.
최근에는 Spring boot와 같은 프레임워크의 영향으로 Unchecked Exception을 선호하는 경향이 있다.
Error vs Exception
Error는 JVM에서 발생하는 문제로, 프로그램의 정상적인 실행을 방해하는 상황이다. Error는 회복이 어려우며, JVM이나 하드웨어 등 시스템 자원과 관련된 시스템 레벨에서 발생할 수 있다. Error는 컴파일러가 처리를 강제하지 않으므로, Unchecked이며 Error가 발생하면 프로그램은 비정상적으로 종료된다.
- OutOfMemoryError: JVM의 메모리가 부족하여 더 이상 객체를 생성할 수 없는 상황
- StackOverflowError: 재귀 호출이 너무 깊어 스택 메모리가 고갈된 상황
- NoClassDefFoundError: 클래스 정의를 찾을 수 없는 경우
- InternalError: JVM 내부 오류
- AssertionError: assert 구분이 실패한 경우
Exception은 프로그램 실행 중 발생할 수 있는 오류 상황이며 대부분 회복이 가능하다. 프로그램 내에서 예외 처리를 통해 오류 상황을 제어할 수 있고, 대부분 프로그램 논리나 외부 리소스 접근과 관련된 문제로 애플리케이션 레벨에서 발생한다.
References
https://medium.com/@toimrank/exception-handling-in-detail-126d19bc0b67
Exception Handling in detail
Exception handling is a powerful feature of Java. Exception handling allows us to handle any exception that occurs at runtime and stop the…
medium.com
'Java' 카테고리의 다른 글
[Java] 동일성과 동등성에 관하여 (0) | 2025.03.17 |
---|---|
[Java] equals()와 hashCode()에 관하여 (0) | 2025.03.14 |
[Java] 얕은 복사와 깊은 복사 (3) | 2025.03.11 |
[Java] 일급 컬렉션이란? (1) | 2025.03.08 |