본문 바로가기
쿤즈 Dev/Java

[Java] 예외 계층 구조 Exception Hierarchy

by :)Koon 2023. 9. 25.

자바(Java)에서 예외(Exception)는 계층적인 구조를 가지고 있다. 이러한 구조를 이해하면 예외를 효과적으로 처리하고 관리할 수 있다.

이번 포스팅에서는 자바에서 사용하는 예외의 계층 구조에 대해서 알아보자.


예외 계층 Exception Hierarchy

자바의 예외 클래스들은 'java.lang' 패키지에 정의되어 있으며, 모든 예외 클래스는 Throwable 클래스를 상속한다. 아래는 자바의 예외 계층 구조에 대한 설명이다.


Throwable

모든 예외 클래스의 최상위 클래스이다.

두 가지 주요 하위 클래스(Error, Exception)를 가지고 있다.

 

Error

Error 클래스는 일반적으로 개발자가 직접 처리하지 않아야 하는 치명적인 오류를 나타내는 클래스다.

프로그램이 복구할 수 없는 상태에 도달했을 때 발생하며, 주로 시스템 레벨에서 발생한다.

예) OutOfMemoryError, StackOverflowError

 

Exception

예외 클래스의 두 번째 주요 하위 클래스이다

개발자가 직접 예외를 처리하거나 처리하도록 강제할 수 있는 예외를 나타낸다.

예) Unchecked Exception(Runtime Exception)

 

Checked Exception

컴파일러가 예외 처리를 강제하는 예외이다.

예외를 처리하거나 throws 예약어를 사용하여 예외를 상위 메서드로 전파해야 한다.

예) IOException, SQLException

 

Unchecked Exception

명시적으로 예외 처리가 필요하지 않으며, 컴파일러 오류가 발생하지 않는다.

개발자의 실수 또는 잘못된 사용으로 발생하는 예외를 나타낸다.

예) NullPointerException, ArithmeticException


예외 계층 구조를 이해하면 어떤 종류의 예외가 어떤 상황에서 발생할 수 있는지 파악하고, 적절한 예외 처리를 수행할 수 있다. Checked Exception은 예외 처리를 강제하므로 반드시 예외 처리 코드를 작성해야 한다. Unchecked Exception은 예외 처리 코드를 작성하지 않아도 컴파일러 오류가 발생하지 않지만, 예외 처리 코드를 작성하는 것이 좋다.


예외 계층 구조를 만든 이유

자바의 예외 계층 구조는 프로그램의 안전성과 신뢰성을 높이기 위한 중요한 디자인 원칙에 기반하고 있다. 이러한 구조는 다음과 같은 이유로 존재한다.


에러의 분리

예외 계층 구조를 통해 치명적인 오류(Error)와 일반적인 예외(Exception)를 분리함으로써, 프로그램이 복구 가능한 예외 상황과 복구 불가능한 치명적인 오류를 구분할 수 있다. 이로 인해 치명적인 오류로부터 프로그램을 보호하고, 예외 상황을 처리할 수 있다.

 

에러 처리의 강제

Checked Exception의 경우, 컴파일러가 예외 처리를 강제함으로써 개발자에게 예외 처리를 강요한다. 이는 예외 상황에 대한 명확한 대응을 유도하며, 예외가 발생했을 때 처리하지 않은 예외를 방지한다.

 

문서화와 통일성

예외 계층 구조를 잘 따르면 코드가 더욱 명확하게 문서화된다. 메서드 시그니처에 throws 절을 사용하여 어떤 예외가 발생할 수 있는지를 명시적으로 나타낼 수 있다. 이는 다른 개발자들이 코드를 이해하고 사용할 때 도움이 된다.

 

선택적 예외 처리

Unchecked Exception의 경우, 예외 처리를 강제하지 않기 때문에 개발자는 어떤 예외를 처리하고 어떤 예외를 처리하지 않을지 선택할 수 있다. 이는 코드를 더 유연하게 만들어 준다.

 

시스템 안전성

예외 계층 구조는 자바 언어 및 런타임 환경의 안전성을 보장하기 위해 사용된다. 예외가 발생할 때, 예외 처리 메커니즘을 통해 시스템이 충돌하지 않고 graceful 한 방식으로 처리된다.

* graceful: 어떤 일이나 처리과정이 오류나 예외 상황을 만났을 때에도 부드럽게 처리되거나 종료되는 것을 의미

이번 포스팅에서는 예외 계층 구조에 대해서 알아보았다. 예외 계층 구조는 프로그램의 신뢰성과 안정성을 향상시키며, 예외 처리를 명확하게 정의하고 문서화하여 코드를 관리하기 쉽게 만든다. 이러한 구조는 프로그래머가 예외 상황을 신속하게 인식하고 적절하게 대응할 수 있도록 도와준다.

댓글