throws 질문
334
작성한 질문수 49
안녕하세요. 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)의 코드를 실행하겠지요.
감사합니다.
0
답변해주셔서 감사합니다. 제가 생각을 잘못 했네요ㅠㅠ
전 throw new Exception() 인지 알았는데, throws는 메서드 옆에 붙이는 예외 시그니처인데, throws랑 throw랑 헷갈렸습니다. 다시 한 번 보니 이해가 됩니다 ㅠㅠ
답변해주셔서 감사합니다!!
트랙잭션 격리수준 선택에 대해서 질문
0
25
1
spring initialiser 어떤걸 선택해야될지 모르겠어요
0
61
2
트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.
0
73
1
jdbc 학습하다 궁금해서 질문드려요
0
104
1
정상이체와 이체중 예외발생 차이
0
86
2
이번 강의부터가 JDBC 직접 사용 맞나요?
0
103
1
순수한 서비스 계층에 대한 의문???
0
94
2
3_4test, 4test 자동 리소스 안됨
0
66
2
데이터베이스 선택 관련 질문.
0
77
2
after 메서드 사용 유무
0
67
2
데이터베이스 접근 및 DB 락
0
65
1
@SpingBootTest, @TestConfiguration
0
68
1
Read Committed 격리 수준 사용 관련 질문
0
62
1
AopCheck Test 부분의 EnhancerBySpring 확인 법??
0
74
2
커리큘럼 관련 질문
0
85
1
서비서 계층 스프링 프레임워크 사용
0
100
1
validation(toMember)의 위치
0
91
2
데이터 계층에서 서비스 로직의 datasource를 인식하는 방법
0
178
2
member 상수 질문
0
140
2
ctrl + F6 이후로 con 인식이 안 됩니다
0
171
2
DrivenManager 와 Connection 반환에 대한 질문입니다!
0
121
1
섹션5 트랜잭션 템플릿관련 질문(이기종 DB)
0
127
1
세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?
0
107
1
트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?
0
105
1





