체크예외 : 예외를 잡아서 처리하지 않으면 항상 throws 해서 위에 던져야 한다.
언체크 예외 : 예외를 잡아서 처리하지 않아도 throws를 생략할 수 있다. 알아서 던져진다.
@Slf4j
public class UncheckedTest {
Service service = new Service();
@Test
public void unchecked_catch(){
service.callCatch();
}
@Test
public void unchecked_throw(){
assertThatThrownBy(()->service.callThrow()).isInstanceOf(MyUncheckedException.class);
}
static class MyUncheckedException extends RuntimeException{
public MyUncheckedException(String message) {
super(message);
}
}
static class Service{
Repository repository = new Repository();
public void callCatch(){
try{
repository.call();
}catch (MyUncheckedException e){
log.info("exection", e);
}
}
public void callThrow(){
repository.call();
}
}
static class Repository{
public void call(){
throw new MyUncheckedException("ex");
}
}
}
간단하게 테스트만.
언체크예외인 RuntimeException을 상속받은 커스텀예외를 만들었다.
Service의 callThrow()를 보면, 따로 throw 해서 명시하지 않는다. 그래도 컴파일러는 체크하지 않는다.
근데 명시하는 경우도 있다. 그냥 단순하게 여기에서 이런 예외가 발생할 수 있다고 명시하는 것이다.
unchecked_catch도 try catch로 callCatch에서 잡은거라 정상적으로 되고,
unchecked_throw도 예외가 나와야 정상작동 하게끔 assertThatThrownBy 해줘서 제대로 실행 되었다.
'스프링 > 5. 스프링 DB-1' 카테고리의 다른 글
35. 언체크 예외 활용. (0) | 2023.10.04 |
---|---|
34. 체크예외 활용 (0) | 2023.10.03 |
32. 예외 테스트 (0) | 2023.10.02 |
31. 예외 기본 규칙 (0) | 2023.10.02 |
30. 자바 예외 (0) | 2023.10.02 |