반응형
예외란?
- 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 나타내며, 이를 처리하기 위한 메커니즘
- 자바에서는 예외를 Throwable 클래스와 그 하위 클래스(Exception, Error)로 표현
- Error: 시스템 수준에서 복구할 수 없는 문제(JVM 내부 오류 등)
- Exception: 애플리케이션 수준에서 복구 가능한 문제
- Unchecked Exception : RuntimeException과 그 하위 클래스
- Checked Exception :Exception 을 상속하지만 RuntimeException의 하위 클래스가 아닌 예외들
예외 처리의 개념은 자바 이전에도 존재했지만, 자바는 이를 더 정형화하고 언어 차원에서 강력하게 지원한다. 자바의 Checked Exception은 개발자가 예외 처리를 강제함으로써 소프트웨어의 안정성을 높이는 것을 목표로 도입되었다.
- 네트워크 장애, 파일 접근 오류 등 실행 시 발생할 수 있는 예외 상황을 처리한다.
- 예외 발생 시 적절한 처리를 통해 시스템이 비정상 종료되는 것을 방지한다.
- 예외 처리를 명시적으로 작성함으로써 코드의 의도를 명확히 하고, 오류 디버깅을 용이하게 한다.
Error
- JVM이 실행 중에 발생하는 치명적인 오류로 인해 애플리케이션이 복구할 수 없는 상황
- 복구할 수 없는 문제 상황이기 때문에 애플리케이션에서는 Error를 직접 처리하기보다 로그를 남기거나 시스템을 안정적으로 종료시키는 방법을 고려
- ex : OutOfMemoryError, StackOverflowError, NoClassDefFoundError 등
Checked Exception
- RuntimeException을 상속하지 않는 예외 클래스들을 지칭한다. 컴파일 시점에 확인되며 반드시 예외 처리를 해야 한다(try-catch 또는 throws를 사용). 주로 외부 요인으로 인한 예외 상황에 사용한다.
- ex : IOException, SQLException, ClassNotFoundException 등
Unchecked Exception
- RuntimeException을 상속하는 클래스들로 런타임에 확인되는 예외들이다. Checked Exception과 달리 명시적인 예외 처리를 강제하지 않는다. 주로 프로그래밍 오류로 인한 예외에 사용된다.
- ex : NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 등
왜 다른 프로그래밍 언어는 CHecked Exception을 포함하지 않을까?
- Checked Exception을 사용하면 반드시 예외 처리를 강제하기 때문에 코드의 복잡성이 높아지고 가독성이 떨어진다.
- Checked Exception은 복구 가능한 예외를 처리하기 위한 목적으로 설계되었지만, 실제로는 많은 경우 복구가 불가능한 경우가 많다. 네트워크 장애나 파일 시스템 오류 처럼 개발자가 복구하기 어려운 경우가 많다.
반응형