반응형

Querydsl을 이용한 리팩토링 (feat. 쿼리 조각화)

Querydsl을 공부하다가, 예제코드를 보고, 당연한 것임에도 정말 좋은 방법이다 라는 생각이 들어서 글을 남긴다.

 

Before Refactoring Code

리팩토링을 하기 전의 코드다.

Querydsl을 이용하여 동적쿼리를 작성한 코드다.

  • 만약 검색 조건으로 들어온 itemName이 like검색을 수행하고, 없으면 like 검색을 하지 않고, 

  • 만약 검색 조건으로 들어온 maxPrice가 null이 아니면 and 조건을 달아서 >= maxPrice 를 수행하고, null이면 안하는

이러한 로직이다.

 

그런데, 여기서 조금더 코드를 개선했더니 많은 이점을 얻을 수 있었다.

 

우선, 리팩토링한 코드를 보자.

 

After Refactoring Code

 

itemName의 like 검색 조건식과, maxPrice의 조건식을 메서드화 했다.

우선, 표면적으로 얻을 수 있는 이점은, findAll() 메서드가 누구라도 쉽게 이해할 수 있을 정도로 깔끔하게 정돈되었다는 것이다.
가독성이 훨씬 좋아졌고, 이것만으로도 리팩토링의 의미가 있을 것으로 예상된다.

하지만, 이점은 이것이 다가 아니다.

LikeItemName()maxPrice() 메서드가 쿼리 조각화가 되어, 필요한 경우 재사용이 가능해졌다는 것이 큰 이점이다.

 

다시 한번 둘을 비교해보자.

한 눈에 봐도 훨씬 깔끔한 findAll()메서드, 그리고 재사용성이 가능하도록 쿼리 조각화가 된 likeItemName(), maxPrice() 메서드.

조금 과장하여 정말 감동스럽지 않은가? 

아직 배울 것이 많은 나에게는 정말 멋진 리팩토링이었다.

반응형