[트러블슈팅] Unchecked assignment: 'java.util.List' to 'java.util.List<directory.directory.directory.class>'

DY_DEV·2023년 12월 14일
0

TIL

목록 보기
17/17
post-thumbnail

Spring data JPA 관련 강의를 수강하면서 조금 신경쓰이게 하는 경고를 만났다. 실행은 잘 되지만 외면하고 넘어가면 안될 것 같아 이렇게 회고를 남겨본다.

문제

위 코드는 스프링 부트의 JPA를 통해 특정 조건의 데이터를 불러와 리스트로 반환하는 코드다. 수업의 레퍼런스 코드를 그대로 입력했고, 실행도 잘 되어 수업내용과 같은 결과가 반환됐지만 내 로컬에서는 해당 경고가 등장했다. 이후에 createQuery()를 이용한 비슷한 코드를 작성해도 문제는 반복됐다.

해결

(1) 명시적인 반환타입 입력

구글링 해본 결과 문제는 쉽게 해결할 수 있었다. 경고는 findByUsernameAndAgeGreaterThan 메서드가 반환해야하는 타입과 createQuery가 반환하는 타입이 달라 컴파일러가 타입을 추론하는 과정에서 제네릭 타입 추론이 제대로 이뤄지지 않아 발생했다.

원인을 조금 더 깊게 분석해 보면, EntityManager의 createQuery 메서드는 jakarta.persistence.Query를 반환하는데 이것은 raw 타입이라 이대로 코딩한다면 타입 안정성이 불안해지는 문제가 발생한다. 이것을 방지하기 위해 경고가 출력되었던 것이었다.

createQuery() 마지막 부분에 아래와 같이 명시적으로 반환 타입을 입력해 경고가 반복되지 않도록 조치했다.

(2) @SuppressWarnings("unchecked")

또 다른 방법도 있다. 만약 경고가 발생하는 코드가 안전하다고 확신이 든다면, @SupperessWarnings 어노테이션으로 경고를 억제할 수 있다. 단, 해당 어노테이션은 가장 작은 범위에 위치해야한다.





참고

https://meaownworld.tistory.com/entry/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-%EA%B7%9C%EC%B9%99-24-%EB%AC%B4%EC%A0%90%EA%B2%80-%EA%B2%BD%EA%B3%A0%EB%A5%BC-%EC%A0%9C%EA%B1%B0%ED%95%98%EB%9D%BC

https://memo-the-day.tistory.com/4

https://donghyeon.dev/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C%EC%9E%90%EB%B0%94/2021/03/25/raw-%ED%83%80%EC%9E%85%EC%9D%80-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%90%EC%9E%90/

0개의 댓글