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

황규철님의 프로필 이미지

작성한 질문수

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

스프링 예외 추상화 이해

DataAccessException 타입으로 던졌는데, BadSqlGrammarException으로 잡을 수 있는 이유가 궁금합니다.

작성

·

816

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
Java 기본 문법을 여쭤보는 것 같지만 궁금합니다ㅜㅜ.

어떻게 부모타입(DataAccessException)으로 throw했는데 자식타입(BadSqlGrammarException)으로 catch할 수 있는 건가요?

1.png이렇게 테스트를 해보았는데, 잡히더라구요. 그래서 catch문에서 자동으로 upcasting이 되는건가 싶어서 RuntimeException이 아닌 Checked Exception으로도 진행을 해보았습니다.

2.png하지만 컴파일 에러가 발생하더라구요ㅜㅜ.

RuntimeException만 upcasting을 해주는 건지, 아니라면 어떻게 자식타입으로 catch할 수 있는건지 궁금합니다!

 

답변 3

2

우선 업케스팅은 둘다 자동으로 되는거 같고

컴파일 에러 관련해서 저도 궁금해서 여러 군데 찾아봤지만 정확한 답인지는 모르겠지만 chatGPT에게 물어봤을때, 런타임예외가 아닌 Exception을 던졌을때, 명시적으로 잡아주지 않으면 컴파일 에러가 나타난다고 하네요.

아마 컴파일 에러가 아니라면 로직상 SQLException도 잡아주지 않았을까 싶습니다.
참고로 Java 언어의 예외 처리 관련 공식 문서와 Java 11 버전에서의 예외 처리 규칙을 기반으로 작성되었다고 합니다.

정확한 답변 아시는 분 댓글 부탁드립니다 ㅜㅜ

1

혹시 문제 해결하셨나요?? 저도 궁금해서 그런데 해결하셨다면 공유해주세요!!

0

안녕하세요, 황규철 님. 공식 서포터즈 codesweaver 입니다.

말씀하신 것처럼 예외는 부모 객체(상위 객체)로는 잡을 수 있으나 하위 객체로는 잡을 수 없습니다.

제가 로컬에서 테스트를 진행해보니 DataAccessException 은 BadSqlGrammarException 로 잡을 수 없습니다. 혹시 강의 중 어느 부분에 대한 질문인지 시간을 남겨주시면 다시 확인하도록 하겠습니다.

감사합니다.