자바의 에러는 크게 2개로 나뉜다.
Checked Exception :
RuntimeException의 하위클래스가 아니면서 처리할 수 있는 오류.
- try ~catch로 처리되어야함
- 에러발생시 롤백하지 않음
- ex. FileNotFoundException
Unchecked Exception :
RuntimeException의 하위클래스, 처리할 수 없는 오류로 runtime중에 발생할 수 있음.
- 에러발생시 롤백
즉, 컴파일이 잡는 오류는 CheckedException, 아니고 실행중 나오는 오류는 UncheckedException이다.
에러는 (1) 던지거나(throws) (2) 잡는것 (catch) 으로 처리할 수 있다.
checkedException은 항상 throws를 해줘야하고 처리해줘야한다.
static class Service{
Repository repository = new Repository();
public void callCatch() {
try {
repository.call(); //잡음
} catch (MyCheckedException e) {
//예외처리 로직
log.info("예외처리, message ={}", e.getMessage(), e);
}
//이후로 정상 동작 -> 성공으로 동작
}
public void callThrow() throws MyCheckedException {
repository.call(); //던짐
}
}
static class Repository {
public void call() throws MyCheckedException{ //checked 예외는 잡거나 던져야함
//checkerror라서 컴파일 에러뜸
throw new MyCheckedException("ex");
}
}
요즘은 잘 쓰이지 않는다.
그 이유는 처리하기 어려운 db exception, network 오류와 같은걸 처리할수없어서 계속 던지는 경우에 1. 의존성이 생김 2. 복구불가능함 이런 이슈가 생기기 때문이다.
ChekcedException 은 try ~catch문으로 잡아 처리하면 되는데 UncheckedException은 실행중 발생하는 이슈로 무분별한 사용을 막으려 강제하지 않는다.
UncheckedException은 throws를 생략해도 잘 동작한다(무시가능)
참고 : https://devlog-wjdrbs96.tistory.com/351
https://velog.io/@squarebird/Checked-Exception%EA%B3%BC-Unchecked-Exception