Spring/Querydsl

Querydsl - QClass란?

거북코딩 2024. 3. 3. 16:51

해당 게시글은 Querydsl에 관하여 공부하다가 정리하는 글들 중 하나이며, 

 

Querydsl에 관한 게시글 카테고리 및 

이전 글 - Querydsl을 사용하는 이유 혹은 

다음 글 - Querydsl 초급 문법. Q-Type에 관하여 

 

에 관심 있으시다면 링크를 연결시켜두었으니 클릭하시면 이동됩니다. 

 


👉 QClass란? 

 

Querydsl을 사용하면 기본적으로 QClass라는 자식이 생성된다. 이는 엔티티 클래스의 메타 데이터를 가지고 있는 클래스이다. 

 


👉 QClass에 관한 의문점 

 

대충 보면 Entity 클래스들 이름 앞에 Q자 하나 붙어서 생긴, 심지어 Entity랑 별반 다를 것 없는 QClass들이 생성되어 다음과 같은 점들이 의아했다.

 

  1. QClass는 어떤 과정으로 만들어지는걸까?
  2. 그냥 Entity를 사용하면 될텐데 굳이 QClass를 새로 생성해서 사용하는 이유는 뭘까? 

 

 

  • QClass는 컴파일 단계에서 엔티티를 기반으로 생성되며, JPA_APT(JPAAnnotationProcessTool)가 @Entity와 같은 특정 어노테이션을 찾고 해당 클래스를 분석해서 만든다. 
  • QClass는 엔티티 클래스의 메타 정보를 담고 있는 클래스로, Querydsl은 이를 이용하여 타입 안정성(Type safe)를 보장하며 쿼리를 작성할 수 있게 된다. 
  • QClass를 사용하여 쿼리를 작성하면 엔티티 속성을 직접 참조하고 조합하여 쿼리를 구성할 수 있다. 
  • QClass를 사용하면 컴파일 시점에 오류를 확인할 수 있다. 
  • QClass는 엔티티 속성의 타입을 정확하게 표현하므로, 타입에 맞지 않는 연산이나 비교를 시도하면 컴파일러가 오류를 감지할 수 있다. 
  • IDE의 자동완성 기능을 활용하여 속성 이름을 직접 기억하지 않고 쿼리 작성을 보다 편리하게 할 수 있다. 

 


👉 정리해보면, 

이전 게시글부터 Querydsl 및 QClass에 대해서 공부해보았는데, 이들의 가장 큰 장점은 컴파일 단계에서 에러를 잡을 수 있다는 점 같다. JPQL은 문자열에서 오타 혹은 문법적인 오류가 발생해도 런타인 시점에만 에러 확인이 가능했기 때문에 Querydsl이 이 문제를 해결해주어서 널리 사용되는 것 같다. 

 

또한, 공식 홈페이지에도 있듯 type safe 즉, 엔티티를 직접 사용하는 것이 아니라, 엔티티 클래스 정보 활용을 위해 QClass를 만들어 사용함으로서 타입 안전한 쿼리작성을 할 수 있다는 점도 장점 같다. 

 

 


 

참고 

https://ssow93.tistory.com/60 

https://velog.io/@jmjmjmz732002/SpringBoot-QueryDSL-JPA-1-%EC%82%AC%EC%9A%A9-%EC%9D%B4%EC%9C%A0-%EC%83%9D%EA%B0%81%ED%95%B4%EB%B3%B4%EA%B8%B0

https://ssow93.tistory.com/34