본문 바로가기

일상

[멋쟁이사자처럼] 코드리뷰 3주차

 

 

더 좋은 코드를 만들기 위해 잠도 줄여가며 여기에 투자를 하였다.

 

이번에도 받은 리뷰에 대해 정리해 보는 시간을 가져볼려고 한다.

 

 

1. 역할 분리

 

 

Item이라는 class에 파싱이 편하여서 ItemDtDto를 만드는 것을 만들어서 받은 리뷰이다.

솔직히 어떻게 수정을 해야 하는지 고민을 진짜 많이 했다.

 

화요일마다 강사님의 모범답안을 보던중 해결을 이렇게 풀어봤다.

바로 static를 사용하는 것이다.

내가 진행중인 환경에서는 static을 그렇게 좋아 하지않아 거의 무조건 객체생성 후 하는 것이 일반적이였다.

 

 

ItemDtDto안에 넣고 Item을 파라미터로 받아 생성하는 식으로 변경을 하였다.

또한, this.itemId = item.getId() 방식에서 builder 패턴으로 변경하여 더 명확하게 변경하는 식으로 수정하였다.

 

 

2. 일급 객체

 

 

 

흠.. 일급 컬렉션...

솔직히 처음 써보는 것이다.

 

그래도 마침 얼마전에 책을 읽으면서 일급객체에 관련하여 읽을 적이 있다.

 

 

 

소트웍스 앤솔러지 라는 책인데, 객체지향 생활체조 파트에서 언급이 되었습니다.

 

쉽게 말해 Collections을 class에서 관리를 하는 것을 말한다.

LIst<Item> 이라는 것이 있으면 Items라는 것을 만들어 관리하는 것을 말하는데, 안에 값을 빼내기에도 class가 분리되어 있어 소슥가 많이 더럽지 않다는 것을 알수 있다.

 

 

 

나는 이런 식으로 수정을 하였다.

하지만 여기서도 문제가 있다. OrrderHistDto.OrderItemHistDto가 너무 더럽다고 느껴지기 때문이다.

초기 설정에 OrderHistDto안에 static으로 OrderItemHistDto가 있어 일단 접근하기가 너무 힘들다.

이것도 분리를 하게 되면 좀더 깔끔하게 느껴지지 않을까? 하는 생각이 있다.

 

 

3. 좀 더 동적으로 변경

 

 

 

한번 쿼리를 봤다.

 

 

2주차때 수정한 코드였다.

 

JPA를 사용하면서 이렇 코드를 작성하면 mybatis가 더 편할 수 도 있다는 생각이 들수도 있다.

JPA하면 JOOQ, QueryDsl를 생각하는게 일반적이다.

나 또한, QueryDSL를 사용하고 싶어했지만 미션지에 없어 닫혀진 생각을 했다는 생각을 했다.

 

 

 

 

QueryDsl을 적용하기 위해 밑에와 같이 설정했다.

 

 

 

 

Spring boot 2.6에서는 querydsl에 version을 직접 넣어야 해서 좀 설정이 오래걸렸던 것같다.

 

 

 

JPQL과는 다르게 select, from, where 에 맞게 썼는지 컴파일 하기 전에 알 수 있어 더 손쉽게 동적을 구현을 할 수 있다.

 

4. 좀 더 우아한 코드로

 

 

이건 내가 진짜 안좋은 습관을 가졌다는 것을 배웠다.

처음에는 시크릿 코드라는 곳에서 접했는데 거기서는 당연하게 @AllArgsConstructor와 @Builder을 같이 사용하여 나도 그 습관이 배웠었다.

 

이거를 고치는데 2시간을 소요 하였다.

 

 

위에 값은 진짜 필요한 값만 넣고 밑에에는 생성자를 따로 만들어 그 값들만 builder가 가능하도록 수정 하였다.

 

 

이처럼 수정을 하였다.

 

 

정리,  이제 얼마 남지 않았다.

마지막까지 최선을 다해야 겠다.

 

점점 시간이 지날 수록 더 깔끔하게 변경이 되니 재밌다고 느끼게 되었다

상수는 enum에 역활에 맞게 소스 구성하기 parsing은 builder로 하는것이 파라미터가 많을 수록 효율적이게 된다.

꼭 기억하자! 

생각보다 forEach나 람다, java8에 추가되었던것들이 많이 사용하게 되어 좋았다.