sonarqube로 코드를 검증하던 중 굉장히 기초가 되는 부분에 오류가 있음을 발견했고, 이를 수정하면서 리뷰 시간을 가졌다.
Remove the boxing to "Long".
.couponClickCount(Long.valueOf(statsMemberStats.stream().filter(i -> i.isCouponClick()).count()).intValue())
statsMemberStats.stream().filter(i -> i.isCouponClick()).count()
는 long primitive(기본) 타입이다. 이를 int primitive type으로 형변환을 하는 것은 (int)를 사용하여 같은 기본형 타입으로 처리하면 되는데, 이를 Long으로 변환해서 해당 메서지가 뜬 것이다.
원시 타입과 참조 타입을 혼용해서 사용하지 말자
문제 코드에서 사용한 Long.valueOf().intValue()는 기본형 long타입을 Long Reference(참조) 타입으로 변환하는 것이다. 이 과정에서 불필요한 Long 인스턴스가 생성된다. 불필요한 객체 생성으로 인한 성능 저하를 일으키므로 혼용해서 사용하지 말고, 최대한 원시타입을 사용하자
코드는 아래와 같이 변경하였다.
.couponClickCount((int)statsMemberStats.stream().filter(i -> i.isCouponClick()).count())