인프런 커뮤니티 질문&답변

gntjd135님의 프로필 이미지
gntjd135

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

예외 포함과 스택 트레이스

UNCHECKED EXCEPTION 질문

작성

·

389

·

수정됨

1


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
uncheckedapptest 클래스에서 service class 부분입니다. service.logic()을 실행하면 먼저 repository.call()에서 runtimesqlexception이 발생하게 됩니다. 그럼 이 경우에 아래줄읜 networkclient.call()을 실행 안하고 바로 throw runtimesqlexception을 하게 되나요?

이 부분에서 runtimesqlexception.class를 runtimeconnectexception으로 바꿔서 검증하면 에러가 납니다.!

결론)

1)이 코드가 작동할때는 runtimesqlexception이 발생해서 networkclient.calll()을 실행안하고 throw로 runtimesqlexception만 던지는지

2) 그럼 서블릿은 runtimeconnectexception이 발생했다는 것을 인지를 전혀 못하는지

 

3)마지막 사진에서 runtimesqlexception.class대신 runtimeconnectexception.class로 바꿔 실행하면 왜 초록불이 안들어오는지 궁급합니다!

궁금합니다!!

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. gntjd135님

Q: 그럼 이 경우에 아래줄읜 networkclient.call()을 실행 안하고 바로 throw runtimesqlexception을 하게 되나요?

-> 네 맞습니다. 예외가 발생하면 다음 라인을 호출하지 않습니다.

Q: 이 부분에서 runtimesqlexception.class를 runtimeconnectexception으로 바꿔서 검증하면 에러가 납니다.!

-> runtimesqlexception과 runtimeconnectexception은 서로 다른 예외입니다. 따라서 변경하면 검증 로직에서 에러가 발생하는 것이 맞습니다. isInstacneOf(RuntimeException)으로 변경하면 둘다 확인할 수 있습니다. 자세한 내용은 자바 instanceof 로 검색해보시면 이해가 되실거에요.

현재 로직에서는 이미 앞서 예외가 발생했기 때문에 networkClient.call();이 호출되지 않습니다. 따라서 RuntimeConnectException이 발생하지 않습니다. 하지만 앞서 runtimesqlexception 예외를 잡아서 처리하는 코드를 추가하고 이후에 networkClient.call() 로직을 수행한다면 다음 로직이 호출될 수 있고, RuntimeConnectException도 발생할 수 있습니다.

감사합니다.

gntjd135님의 프로필 이미지
gntjd135

작성한 질문수

질문하기