스프링/5. 스프링 DB-1

33. 언체크 예외

sdafdq 2023. 10. 3. 07:29

체크예외 : 예외를 잡아서 처리하지 않으면 항상 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