주제
- check Exception unChecked Exception 차이
목차
- 예외 구분
- 예외 처리하는 방법
- 예외 복구
- 예약 회피
- 예외 전환
- 멘토님 말씀
내용
check Exception unchecked Exception 차이 -
- checkedException의 문제점, 극복 방법
예외 구분( checked, unchecked)

📌
RuntimeException을 상속
유무에 따른 구분 !- R.E 상속하지 않는 클래스는 Checked Exception, 반대로 상속한 클래스는 UnChecked Exception이다.
정의
- Unchecked
- 명시적인 예외 처리를 강제하지 않기에 Uncheked라 불리운다.
- 명시적인 예외처리는 try~catch , throw로 호출한 메소드에서 예외를 던지지 않는 행위
- Checked
- 에외 처리 강제함으로서 Checked 라 불리운다.
- try~catch
반드시 잡거나
, throw로 호출한 메소드에서예외를 반드시 던져야
한다.
예외를 처리하는 방법
1. 예외 복구
- 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법
- 예외를 잡아서 일정 시간, 조건 만큼 대기후 다시 재시도 (retry 전략)
- 최대 재시도 횟수를 넘기게 되는 경우 예외를 발생시킨다.
- 대부분의 상황에서 예외를 복구할 수 있는 경우는 거의 없기 때문에 자주 사용되지는 않는다.
- 유니크 해야하는 이메일이 중복되어 sql 오류가 발생할 때 복구할 방법이 없다. 이런 경우 runtimeException을 발생시켜 재입력을 유도하는 것이 현실적.
이럴 경우 코드의 흐름으로 제어하는 것이 좋다.
2. 예외 회피
- 예외 처리를 직접 담당하지 않고 호출한 쪽(caller) 쪽으로 던진다.
- 해당 방법은 긴밀하게 역할을 분담하고 있는것이 아니라면 예외를 그냥 던지는 것 자체가 무책임하다. → 멘토님 : 예외는정
3. 예외 전환
- 에외 회피와 유사하게 메서드 밖으로 던지지만, 그냥 던지지 않고 적절한 예외로 전환해서 넘기는 방법
- 조금 더 명확한 의미로 전달되기 위해 적합한 의미를 가진 예외로 변경.
- 예외처리를 단순하게 만들기 위해 포장 할 수 있다.
🌕 다시 한번 정리

- RuntimeException을 상속하지 않고 꼭 처리해야 하는 Checked Exception 과 반대로 명시적으로 처리하지 않아도 되는 Uncheked Exception로 구분할 수 있다.
추가 키워드 @Transactional
- Unchecked Exception은 Rollback 됩니다.
- 결국 Exception을 Checked 또는 Unchecked를 구분하여 로직의 Rollback 여부를 판단하여, 구현할 수 있습니다.
- 스프링은 기본적으로 Checked 또는 Unchecked를 구분하여 Rollback을 구분하지만, rollback 시킬 Exception을 지정할 수 있습니다.
- 롤백 옵션
- 특정 에외 롤백 되지 않도록 지정
🍗 치킨 사주신 멘토님 말씀
- 스프링에서 트잭 전략이 기본적랸으로 checked일 뿐 unChecked로 트잭을 가져도 된다 라고 표현이 덜 헷갈린다.
- default 다~
- 우린 default 사용안한다.
- checked , unChecked
여러분들이 예외를 만들때 주로 어떤종류로 예외를 만드는지
요즘은 어떤 예외를 자주 발생시키는지 이런것도 말하면 좋을듯하네요 트랜드?