티스토리 뷰
개발을 하다보면 진짜 별의별 에러를 다 마주친다.
그나마 컴파일 에러로 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
✋ RuntimeException Document
https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html
'Java' 카테고리의 다른 글
ConstraintValidator로 컨트롤러에서 받는 값 유효성 체크하기 (0) | 2021.10.14 |
---|---|
for문 보다 Stream API가 느리지만 사용하는 이유 (0) | 2021.10.13 |
custom annotation(커스텀 어노테이션) 만들기 (0) | 2021.10.08 |
빈 문자도 에러 없이 숫자로 형변환 하기 (0) | 2021.10.07 |
JRE와 JDK 차이점 (0) | 2021.10.04 |
- Total
- Today
- Yesterday
- Java
- mockito
- Caching
- 데이터베이스
- annotation
- JPA
- 캐시
- 이클립스
- PostgreSQL
- postgres
- Intellij
- DB
- ssh
- enum
- HttpClient
- springboot
- cache
- 자바
- rabbitmq
- k8s
- eclipse
- DATABASE
- 메시지큐
- 공간데이터
- Spring
- 스프링부트
- MAC
- 어노테이션
- 역직렬화
- 캐싱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |