[코드 리뷰] - Step 3.

김영훈·2024년 3월 8일
post-thumbnail

피드백 1.

ChronoUnit.DAYS.between(LocalDate.now(), request.date()) < member.getTeam().getDayBeforeAnnual();
    }
    private long remainAnnualLeaves(Member member){ // 남은 연차 계산 & 연차 조회시 반환
        long maxAnnualLeave = ChronoUnit.YEARS.between(member.getCreatedAt(), LocalDateTime.now()) >= 1 ? 15L : 11L;

📌 매직 넘버를 상수로 처리하면 가독성이 더 좋아질 것 같은데, 어떻게 생각하시나요?


나의 답변 1.



해결 과정 1.

long maxAnnualLeave = ChronoUnit.YEARS.between(member.getCreatedAt(), LocalDateTime.now()) >= 1 ? 15L : 11L;

안그래도 이 부분의 15L : 11L 가 조금 명확하지 않다고 생각하여 (15L, 11L이 무슨 숫자인지 알 수가 없다.)
enum처리를 하려 합니다.

@RequiredArgsConstructor
public enum JoinDate {
    OVER_ONE_YEAR(15L),
    UNDER_ONE_YEAR(11L);

    private final long maxAnnualLeaves;
    public long getAnnualLeaves(){return maxAnnualLeaves;}
}
long maxAnnualLeave = ChronoUnit.YEARS
                .between(member.getCreatedAt(), LocalDateTime.now()) >= 1 ?
                JoinDate.OVER_ONE_YEAR.getAnnualLeaves() : JoinDate.UNDER_ONE_YEAR.getAnnualLeaves();

💡 JoinDateenum으로 생성하고, maxAnuualLeaveenum으로 처리하였습니다.


피드백 2.

//해당범위에 통근기록 존재 X? -> 통근기록없음 예외처리
List<GetCommuteDetail> commuteDetailList = commuteList.stream()
	.map(GetCommuteDetail::from)
	.collect(Collectors.toList()); //통근기록을 CommuteDetail으로 변환

📌Collectors.toList()Stream.toList()의 차이를 아시나요? Collectors.toList()를 사용한 이유가 궁금합니다!!


나의 답변 2.



해결 과정 2.

안그래도 변환 가능한 리스트를 반환하는게 조금 신경 쓰였는데,
MergeAndSort 종료 후, Merge가 완료된 CommuteListCollections.unmodifiableList()를 통해 불변 List로
감싸서 반환하도록 처리하겠습니다.

private List<GetCommuteDetail> findCommuteListByMemberIdAndStartOfWork(GetCommuteRecordRequest request) {
        List<Commute> commuteList = commuteRepository
                .findCommuteListByMemberIdAndStartOfWork(request.id(), request.getYear(), request.getMonth());
        if (commuteList.isEmpty()) throw new CommuteNotFoundException();
        //해당범위에 통근기록 존재 X? -> 통근기록없음 예외처리
        List<GetCommuteDetail> commuteDetailList = commuteList.stream()
                .map(GetCommuteDetail::from)
                .collect(Collectors.toList()); //통근기록을 CommuteDetail으로 변환

        List<AnnualLeave> annualLeaveLeavesList = annualLeaveService // 연차기록찾기 (오늘보다 미래의 연차기록은 가져오지않음)
                .findAnnualLeavesByMemberIdAndYearMonth(request.id(), request.yearMonth());

        mergeAndSort(commuteDetailList, annualLeaveLeavesList); // .addAll()을 통한 merge
        return Collections.unmodifiableList(commuteDetailList); // 불변리스트로 변환 후 반환
    }

💡 returncommuteDetailListCollections.unmodifiableList()로 감싸서 불변List로 만들어 주었습니다.


0개의 댓글