Querydsl 서브쿼리 중복 코드 개선 - 의존성 분리

중복코드 문제

Querydsl을 활용해 서브쿼리를 작성할 때 리뷰 갯수를 가져오는 서브쿼리의 중복코드가 많았다.
같은 클래스에서는 메서드로 분리해 사용했지만, 다른 클래스에서는 관련 없는 클래스로부터 서브쿼리 메서드를 가져다 쓰는 구조였다.

MemberCustomRepositoryImpl.java, ReviewCustomRepositoryImpl.java

핵심 문제는 서로 다른 클래스에 동일한 서브쿼리 메서드가 중복 작성된 것이었습니다.

특히, MemberCustomRepositoryImpl은 회원(Member)과 관련 없는 리뷰(Review) 서브쿼리 메서드를 포함하고 있어 단일 책임 원칙을 위반했습니다.

이러한 구조는 클래스 간 불필요한 의존성을 높여 코드의 재사용성과 유지보수성을 저하시킬 수 있다.

해결

서브쿼리 전용 유틸 클래스를 생성하고, static 메서드로 공통 서브쿼리 로직을 제공해 분리했다.
또한, 서브쿼리 전담 패키지를 만들어 관련 로직을 한 곳에 모아 유지보수와 확장성을 개선했습니다.
TotalAvgGrade 클래스는 평균 별점 계산 서브쿼리만을 책임지도록 설계하여, 단일 책임 원칙에 맞게 리팩토링했다.

공통 서브쿼리를 재사용할 수 있게 되어 클래스 간 불필요한 의존성이 제거됐습니다.
또한 코드의 일관성, 유지보수성 향상과 서브쿼리 관리가 구조적으로 명확해져 새로운 로직 추가도 수월해졌습니다.