티스토리 뷰

반응형

부제: Checked Exception Unchecked Exception 비교


 프로그램은 항상 개발자가 의도한대로 동작하지 않는다. 이것들을 오류(Error)나 버그(Bug)로 자주 일컫는다. JAVA에서는 '오류'를 다루기 위해 Throwable 이라는 클래스를 활용한다. Oracle은 Throwable에 대해 아래와 같이 소개했다.


 The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement.


 JVM또는 JAVA가 Throwable의 인스턴스를 던진다(throw)고 한다. 한편, Throwable을 상속하는 클래스는 ErrorException이 있다.



1. Throwable의 자식들

 Error는 정상적인 애플리케이션(오라클에서는 reasonable application이라고 표현한다.)에서는 발생할 수 없는 것들을 나타낸다. Error 클래스에 해당하는 것들은 시스템 레벨의 심각한 오류들이다. 그러므로 대부분 애플리케이션은 동작하는 도중에 Error를 처리할 수 없다. (컴파일 자체가 되지 않는다.)


 Exception은 reasonable application이 처리(Handling)할 수 있는 것들을 의미한다. 방금 소개한 Error와 달리 개발자가 로직을 추가하여 처리할 수 있다. 그리고 Exception은 Checked Exception Unchecked Exception(Runtime Exception)으로 나뉜다.



2. Checked VS Unchecked

 이미 살펴봤듯, Checked Exception과 Unchecked Exception은 개발자가 로직을 추가하여 처리할 수 있다는 공통점이 있다. 이 둘을 구분짓는 가장 큰 기준은 '예외 처리 시점' 이다. 아래 표로 간단하게 정리된다.



 Checked Exception의 경우, 컴파일 시점에 해결해야 하므로 대부분 IDE에서 Syntax Error처럼 표시해준다. Checked Exception을 처리하지 않으면 프로그램을 실행할 수 없다. 그러니까, Checked Exception은 컴파일 시점에 해결해야 된다는 점에서는 Error와 차이가 없다. 


 Unchecked Exception의 경우, 애플리케이션을 실행할 때까지는 이상이 없다. 애플리케이션이 동작하다가 Exception이 발생(예: Length 5인 배열의 6번째 항목에 접근한다.)했을 때 별다른 처리가 없으면 애플리케이션이 멈추게 된다.


3. 예외 전환

 Exception은 개발자가 로직을 추가하여 처리할 수 있다고 했다. JAVA에서는 try-catch-finally를 활용하여 Exception-Handling을 한다. (참고: [JAVA] try-catch-finally 구문(block)에 대한 소개) try-catch-finally를 활용하여 예외를 다양하게 처리할 수 있는데, 그 중 하나인 예외 전환에 대해 소개한다.


try {
    // Do Something…
    
} catch (SQLException SE) {
    
    // SQLException이 Custom-Exception으로 전환됨.
    throw new UserException();
}

 위 예제에서는 try-catch를 활용하여 Checked Exception을 Unchecked Exception으로 전환했다. 이렇게 하면 애플리케이션 동작 도중에 Checked Exception을 처리하는 듯한 효과가 난다. Error와 Checked Exception의 차이점이 보이는가? 이렇게 예외 전환이 가능하다는 것이다!


 또한 예외 전환을 활용하여 다양한 Exception을 하나의 Exception으로 통합하여 처리할 수 있다. 이를 Global Exception Handling이라고 하며, Spring과 같은 JAVA 기반 Framework에서 제공하는 기능 중 하나이다.




-끝-




출처 및 참고

https://docs.oracle.com




«   2022/01   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함
Total
770,926
Today
360
Yesterday
315