selectList의 타입 체크에 대해
- 작성자 :
- 익*
- 작성일 :
- 2023-07-27 10:08:31
- 조회수 :
- 662
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
Mybatis CommonDao 에서 commonDao.selectList('쿼리ID', 파라미터)로 실행할 경우 쿼리에서 Car 라는 타입으로 넘겨준다고 했을 때,
List<Car> carList = commonDao.selectList('쿼리ID', 파라미터); 가 아닌
List<String> carStringList = commonDao.selectList('쿼리ID', 파라미터) 으로 해도 실행이 되는 이유가 무엇인가요?
selectList가 generic 타입의 List를 반환하던데 타입 체크 시 오류가 나야 하는 것 아닌가요?
추가 설명하자면 carStringList에 접근할 때는 에러가 떨어지나, 변수를 할당 하는 부분에서 왜 타입체크 에러가 왜 안나는지 궁금합니다.
List<Car> carList = commonDao.selectList('쿼리ID', 파라미터); 가 아닌
List<String> carStringList = commonDao.selectList('쿼리ID', 파라미터) 으로 해도 실행이 되는 이유가 무엇인가요?
selectList가 generic 타입의 List를 반환하던데 타입 체크 시 오류가 나야 하는 것 아닌가요?
추가 설명하자면 carStringList에 접근할 때는 에러가 떨어지나, 변수를 할당 하는 부분에서 왜 타입체크 에러가 왜 안나는지 궁금합니다.
환경정보
-
- OS 정보 : 윈도우
- 표준프레임워크 버전 :
- JDK(JRE) 정보 : 11
- WAS 정보 :
- DB 정보 :
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크 센터입니다.
MyBatis의 selectList 메서드는
컴파일 시점에는 반환 타입을 알 수 없어
보다 유연한 타입으로 데이터를 받을 수 있고
실제 반환 타입을 검사하는 시점은
실제 메서드가 실행되는 런타임 시점에 진행되어
잘못된 타입 사용 시 실제 carStringList에 접근하는 시점인
런타임 시점에서 에러가 발생하게 됩니다.
아래는 Java 제너릭의 주요 개념인
Type Erasure와 PECS에 대해 정리된 자료입니다.
참고 부탁 드립니다.
https://dev.gmarket.com/28
감사합니다.
표준프레임워크 센터입니다.
MyBatis의 selectList 메서드는
컴파일 시점에는 반환 타입을 알 수 없어
보다 유연한 타입으로 데이터를 받을 수 있고
실제 반환 타입을 검사하는 시점은
실제 메서드가 실행되는 런타임 시점에 진행되어
잘못된 타입 사용 시 실제 carStringList에 접근하는 시점인
런타임 시점에서 에러가 발생하게 됩니다.
아래는 Java 제너릭의 주요 개념인
Type Erasure와 PECS에 대해 정리된 자료입니다.
참고 부탁 드립니다.
https://dev.gmarket.com/28
감사합니다.