인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

강성욱님의 프로필 이미지
강성욱

작성한 질문수

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

체크 예외와 인터페이스

throws 질문

작성

·

304

0

안녕하세요. throws 관련해서 질문드릴 게 있습니다. 영한샘 강의자료에

-> 예를 들어서, `Exception`을 `throws`으로 던지면 그 하위 예외들도 모두 던질 수 있다.

이런 문장이 있는데, 그냥 그렇구나 하고 넘어갔는데 테스트를 해보니, 잘 이해가 안 돼서요... throws Exception을 하면 모든 SQLException, IOException 같은 모든 자식 CheckedException을 던진다는 의미인가요?

try {
throw new Exception("Super Exception");
} catch (SQLException e) {
log.error("message={}", e.getMessage(), e);
} catch (Exception e) {
log.error("message={}", e.getMessage(), e);
}

 

그럼 위 코드에서는 SQLException으로 Exception을 받는 catch문에도 걸려야 하는 거 아닌가요?, SQLException은 건너뛰고 바로 Exception으로 가서 이해가 잘 안 됩니다...

 

 

 

답변 1

5

안녕하세요, 강성욱 님! 공식 서포터즈 codesweaver 입니다.

다형성과 관련한 질문인데요,
Exception 과 SQLException 두 가지만 비교해보겠습니다.

 

Exception과 SQLException은 계층 구조를 갖습니다. Exception이 상위에, SQLException이 아래에 위치하는데요.이런 관계일 때 SQLException은 Exception 인가? 라는 질문에 대한 답은 참입니다,  그러나 Exception은 (모두) SQLException인가? 라는 질문에 대한 답은 거짓입니다.

 

다른 예를 들면 '만화가'와 '이말년'을 생각하겠습니다. 이 두 객체중 누가 상위일까요? '만화가'가 위에 '이말년' 작가가 아래에 위치합니다. 누가 위에 위치하는가는 '추상화' 와 관련있습니다. 추상적인 개념일수록 상위에 위치합니다. 그럼 두 객체의 관계는 다음과 같습니다. 이말년 작가는 '만화가'인가? 는 참이지만, 만화가면 (모두) 이말년 작가인가? 는 거짓입니다.

 

다시 SQLException 과 Exception 으로 돌아오면, 즉, SQLException은 Exception이라 할 수 있습니다. 이를 OOP에서는 다형성이라고 하는데, 예외 처리에도 이 다형성 개념을 적용합니다.

 

작성하신 코드를 보면 우선 Exception을 throw 합니다.

예외 처리 코드(catch문들)를 보면 (1)SQLException인지 먼저 확인하고, (2)그렇지 않으면 Exception인지 확인하고 있습니다.

try {
throw new Exception("Super Exception");
} catch (SQLException e) { ... (1)
log.error("message={}", e.getMessage(), e);
} catch (Exception e) { ... (2)
log.error("message={}", e.getMessage(), e);
}

 

앞서 살펴 보았듯 SQLException은 Exception이지만, Exception은 SQLException이 아닙니다.

그래서 (1) 코드를 무시하고 (2)로 넘어갑니다. 그리고 (2)의 코드를 실행합니다.

만약 throw 하는 예외가 SQLException이라면 (1)의 코드를 실행하겠지요.

 

감사합니다.

강성욱님의 프로필 이미지
강성욱
질문자

답변해주셔서 감사합니다. 제가 생각을 잘못 했네요ㅠㅠ
전 throw new Exception() 인지 알았는데, throws는 메서드 옆에 붙이는 예외 시그니처인데, throws랑  throw랑 헷갈렸습니다. 다시 한 번 보니 이해가 됩니다 ㅠㅠ
답변해주셔서 감사합니다!!

강성욱님의 프로필 이미지
강성욱

작성한 질문수

질문하기