QueryDsl Q클래스를 사용하는 이유

Kyle_Kim·2022년 6월 20일
0

QueryDSl로 개발을 하려면 Q-Class를 이용해 개발을 해야 한다.

Q-Class와 같은걸 만들어 사용하는 방식이 처음이라 그런지 왜 굳이 이런 방식으로 사용하는거지? 라는 궁금증이 생기게 되었다.

그래서 이러한 궁금증을 내 나름대로 해결하여 한번 정리해보려고한다.

Q-Class는 어떻게 생성되는것일까?

Q-Class의 생성은 컴파일 시점이다. 

JPAAnnotationProcessor라는 친구가 컴파일 시점에 작동을 하는데, 해당 APT가 @Entity와 @Embeddable과 같은 어노테이션을 찾는다.
그 후 해당 내용들을 분석하여 Q-Class들을 생성하게 된다. 이때 APT는 Q-Class을 생성할때 Entity-Class와 최대한 비슷한 패키지 구조를 유지하려고 한다.

그럼 왜 QueryDSL은 Q-Clas을 만들어서 쓰는것일까?
가장 궁금했던 부분이고, 집가는 버스내에서 생각을 해봐도,, 딱히 생각이 드는부분이 없었다.
그래서 열심히 구글링을 하였고, 신기한것을 발견하였다.

Q-Class라는것(Static Class)은 QueryDSL만 생성해서 사용하는 것이 아니라 QueryDSL과 비슷한 Crieteria도 Static Meta Class를 만들어서 사용을 한다. 이런 Static Meta Class ( Q-class ) 를 만드는 기능은 놀랍게도 JPA에서 지원하고 있는 기능이였다.

그럼 왜 MetaClass ( Q-Class ) 라는것을 만드는 것일까? 

내 나름대로 정리한 답은
EntityClass에서는 property에 접근을 하려면 객체를 만들어 접근해야한다.
그래서 MetaClass 즉 static한 Class를 만들어 지원을 하게되면, 객체를 생성할 필요없이 static이므로 property에 바로 접근하여 사용할 수 있게된다. 

그래서 QueryDSL을 사용할 때 해당 Entity클래스의 propery에 접근을 바로 할 수 있었던것이다.

어찌보면 당연한건데 ,,,,,

다음에는 metaClass에 대해서 조금 더 자세히 공부해보아야겠다
출처: https://hhhhhhhong.tistory.com/88 [wooook:티스토리]

profile
Make Things Right

0개의 댓글