티스토리 뷰

Java

Checked Exception vs UnChecked Exception

파미페럿 2021. 10. 12. 22:22

개발을 하다보면 진짜 별의별 에러를 다 마주친다.

그나마 컴파일 에러로 IDE에서 잡아주면 다행이지만 런타임 에러는 실행시켜보고 여러 가지 테스트를 해봐야 에러를 마주할 수 있고 예외 처리를 할 수 있다.

우리는 이것을 에러, 예외라고 부르며 공통적으로는 Exception이라고 부른다.

 

이 Exception도 두 부류로 나뉠 수 있다는 것을 이번에 알게 되었다.

또한 이 Exception 부류로 인해 기본 transaction 처리를 할 수 있게 된다.

 

 

Checked Exception

외부 요인에 의해 발생할 수 있는 Exception이다.

RuntimeException 자시 자신을 포함해 상속 받지 않은 모든 Exception들이 해당된다. (Exception또한 checked Exception에 해당한다.)

컴파일 중에 예외 처리가 필요한지 안 한지 IDE가 판단해주고 무조건 try-catch나 throw로 예외처리를 하라고 강제한다.

또한 이 예외가 발생했을 경우기본적으로 transaction 처리가 되지 않아서 transaction 처리를 하기 위해서는 별도 설정을 해야한다.

즉, 예외가 발생해도 rollback 처리 되지 않는다.

 

 

제일 자주 볼 수 있는 Checked Exception은 아래와 같은 FileNotFoundException이다.

이와 같이 외부의 영향을 받을 수 있는 에러가 바로 컴파일 단계에서 미리 IDE가 예외 처리의 필요성을 체크할 수 있어서 Checked Exception이라고 한다.

 

 

UnChecked Exception

Check Exception과 반대로 내부 요인에 의해 발생할 수 있는 Exception을 의미한다.

RuntimeException 자신을 포함해 상속 받은 모든 하위 Exception을 의미한다. 따라서 Runtime Exception이라고도 할 수 있다.

(참고로 RuntimeException 또한 Exception을 상속 받은 객체이다.)

런타임에서 에러를 확인할 수 있기 때문에 컴파일 단계에서 미리 예외를 체크할 수 없다.

(그래서 이름이 UnChecked Exception이다.)

이 예외에 대해서는 기본적으로 transaction을 처리해줘서 예외가 발생하면 rollback이 된다.

 

 

unchecked exception은 아래와 같이 배열을 사용할 때 많이 발생한다.

List<String> l = new ArrayList<String>();
		
System.out.println(l.get(0));

 

 

위 코드를 실행시키면 아래와 같이 IndexOutOfBoundsException이 발생한다.

 

이와 같이 직접 실행을 시키고 여러 변수들을 테스트 했을 때 발생할 수 있는 예외를 unchecked exception이라고 한다.

IDE가 미리 체크할 수 없으므로 개발자가 직접 여러 가지 경우의 수를 생각해서 예외 처리를 해줘야 한다.

 

 

Checked Exception vs UnChecked Exception

checked exception과 unchecked exception의 차이점을 간단하게 정리하면 아래와 같다.

 

checked exception unchecked exception (runtime exception)
RuntimeException을 상속받지 않은 모든 Exception RuntimeException을 포함한 RuntimeExcpetion을 상속받은 모든 Exception
Compile(컴파일) 단계에서 체크 가능 Runtime(런타임) 단계에서 체크 가능
IDE가 컴파일 단계에서 체크해 예외 처리를 강제 시킨다 런타임에서 발견할 수 있으므로 개발자가 여러 경우의 수를 생각하고 에외 처리를 해야 한다
Transactional 처리 시 기본 rollback 처리를 하지 않는다 Transactional 처리 시 기본 rollback 처리를 한다.

 

 

어찌보면 간단할 수 있지만 개발을 하다보면 Exception에 따라 특히 rollback 처리 설정을 해줘야하므로 이 정도 정보는 알고 있어야겠다.

아니면 transactional 처리를 했는데 왜 rollback이 안 되냐고 삽질을 할 수 있다 😥😥

 

 

 

 

✋ Exception Document

https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html

 

Exception (Java Platform SE 7 )

protected Exception(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) Constructs a new exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabl

docs.oracle.com

 

✋ RuntimeException Document

https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html

 

RuntimeException (Java Platform SE 7 )

protected RuntimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace en

docs.oracle.com

 

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함