[Java]Error, Exception(Checked, Unchecked)

GilLog·2021년 5월 25일
0

Java

목록 보기
21/29

🙆‍♂️ import 🙇‍♂️

자바 예외 구분: Checked Exception, Unchecked Exception[오늘도 MadPlay!]

Java SE 8 Docs[Oracle]


Exception, Error

Exception은 정상적인 Program의 flow를 어긋나는 것을 말한다.
입력 값에 대한 처리 불가, Program 실행 중 참조된 값이 잘못된 경우 등

Java에서 Exception은 개발자가 직접 Application Code내에서 처리 할 수 있어, 예외 상황에 대해 미리 예측하여 Handling할 수 있다.


Error는 System에 비정상적인 상황이 발생한 경우를 말한다.

Java에서 주로 JVM(Java Virtual Machine)에서 발생시키는 것이고, Exception과 반대로 Application Code에서 잡아도 처리할 제대로 방법이 없다.
OutOfMemoryError, ThreadDeath, StackOverflowError

package src.throwable.error;

public class ErrorExample {

    public static void gillog(String log) {
        System.out.println(log);
    }

    public static void main(String[] args) {
        try {
            gillog("Error Test");
        } catch (StackOverflowError e) {
            // ......... :(
        }
    }
}

위 코드 처럼 StackOverflowError에 대해서 Catch를 하려해도 사실 별 소용이 없다.


Checked Exception, Unchecked Exception

ExceptionError가 Java내에서 상속관계를 살펴보면 아래 그림과 같다.

[출처]자바 예외 구분: Checked Exception, Unchecked Exception[오늘도 MadPlay!]

ExceptionError는 최상위 Object를 상속받는 Throwable Class를 상속받는 Class 이다.

Checked ExceptionUnchecked Exception에 대해 설명 하기전 알아야 할 사항ErrorRuntime Exception이 있다.

결론적으로 먼저 설명하면, Checked ExceptionErrorRuntimeException을 상속하지 않은 Exception Class를,
Unchekced ExceptionRuntimeException을 상속받는 Exception Class를 의미한다.


즉, RuntimeException을 상속하지 않고 꼭 처리해야 하는 Exception은 Checked Exception이고,

반대로 명시적으로 처리하지 않아도 되는 Exception은 Unchecked Exception이다.

Error

Error는 자식 Class로 LinkageError, ThreadDeath, AssertionError, VirtualMachineError를 가지고 있다.

Error를 상속받는 Class에 대한 설명은 아래와 같다.

Class설명
LinkageError어떤 클래스가 다른 클래스에 대한 종속성이 있는 상황에서,
후자 클래스가 이전 클래스를 컴파일 한 후 비호환적으로 변경된 경우 발생하는 Error이다.
ThreadDeath더 이상 사용되지 않는 Thread에 대해 Thread.stop() method가 호출 될 때,
삭제되는 Thread에서 Instance가 throw 되며 발생하는 Error이다.
AssertionErrorAssertion이 실패한 경우 발생하는 Error이다.
Assertion : 해당 지점에서 개발자가 반드시 참(true)이어야 한다고 생각하는 사항을 표현한 논리식
_[EX] assert [boolean]; assert [boolean] : [표현식];
VirtualMachineErrorJVM이 손상되었거나 계속 작동하는 데 필요한 리소스가 부족할때 발생하는 Error

RuntimeException

RuntimeException은 말 그대로 Program 실행 중에 발생하며 System 환경적으로나, Input Value가 잘못된 경우, 의도적으로 개발자가 설정한 조건을 위배했을 때 throw 되게 하는 등, Application 실행 도중에 발생하는 Exception이다.

RuntimeException은 명시적으로 예외 처리를 하지 않아도 되는 Exception이다.
Exception 처리를 명시하지 않아도 Program 구동에 아무 문제가 없다.

이제 CheckedExceptionUncheckedException을 조금 자세히 살펴보자.

CheckedException

CheckedException은 반드시 예외 처리 해야하는 Exception으로, Compile 시점에서 Exception 발생이 확인되는 Exception이다.

CheckedExceptionErrorRuntimeException을 상속하지 않은 Exception들을 모두 포함한다.
Error, FileNotFoundException, ClassNotFoundException 등이 대표적이다.

Spring Framework에서 CheckedException은 Transaction 처리시에 Exception이 발생해도 Rollback을 하지 않는다.

UncheckedException

UncheckedException은 명시적으로 예외 처리 해주지 않아도 되는 Exception으로, Runtime 시점에서 Exception 발생이 확인되는 Exception이다.

UncheckedExceptionRuntimeException을 상속받는 Exception들을 포함한다.
NullPointerException, ClassCastException

Spring Framework에서 UncheckedException은 Transaction 처리시에 Exception이 발생한 경우 Rollback을 수행한다.


CheckedExceptionUncheckedException를 정리한 표는 아래와 같다.

CheckedExceptionUncheckedException
확인 시점CompileRuntime
처리반드시 예외 처리명시적으로 하지 않아도 무관
트랜잭션 처리 시
In Spring Framework
예외 발생 시 Rollback 수행 X예외 발생 시 Rollback 수행 O
예시ClassNotFoundExceptionNullPointerException

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

2개의 댓글

comment-user-thumbnail
2022년 3월 3일

예외 발생 시 Rollback 수행 여부는 Java의 관점에서는 틀린 말이라고 합니다. 순수 Java에서는 UncheckedException이 발생했다고 해서 트랜잭션을 롤백 해야 하는 것은 아니고, 해당 내용은 Spring에 해당하는 내용이라고 하네요.

https://www.youtube.com/watch?v=_WkMhytqoCc 해당 영상 참고 해보시면 좋을 듯 합니다 ^^

1개의 답글