인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

조희제님의 프로필 이미지

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

중복된 메서드 줄이는 방법

작성

·

43

·

수정됨

0

안녕하세요 선생님 강의 잘 들었습니다!

강의를 통해 배운 내용을 개인 프로젝트에 적용 하던 중 궁금한점이 생겨 질문 드립니다.

private List<Long> getEventIdList(List<EventSimpleInfo> events) {
    return events.stream()
            .map(EventSimpleInfo::getId)
            .toList();
}

private List<Long> getEventIds(List<BookmarkedEventSimpleInfoQuery> events) {
    return events.stream()
            .map(BookmarkedEventSimpleInfoQuery::getId)
            .toList();
}

 Dto 조회한 두개의 List 입니다.

두 List에서 id 값을 뽑는 같은 행위를 하고 있는데 어떻게 하면 중복을 줄일수 있을지 모르겠습니다.

Dto에 일급 컬렉션을 적용하자니 너무 클래스가 많아 질것 같고,

Dto에 인터페이스를 적용 하자니 Dto에 역할을 부여 하는 것이 맞나? 라는 생각이 듭니다.

다른 방법은 Dto 내부에 로직을 두는 방법도 생각해 보았는데 어떤게 좋을까요?..


쿼리를 줄이기 위해 Dto 조회를 하고 부족한 상태를 조회 하여 값을 채우고 있는데 너무 중복된 행위가

많아서 고민 입니다. 어떻게 해야 할까요?

 

답변 2

1

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 조희제 님!

 

Dto에 인터페이스를 적용 하자니 Dto에 역할을 부여 하는 것이 맞나? 라는 생각이 듭니다.

DTO도 Object, 즉 객체인데요. 인터페이스를 적용하는 것이 크게 어색하지는 않다고 생각합니다.
역할을 부여한다기 보다는 객체의 공통적인 특성을 명시하는 것이니까요.

두 DTO의 이름을 보아하니 비슷한 역할을 하는 DTO 같고, 상황에 따라 ID를 추출하는 부분을 인터페이스로 뽑을 수 있을 것 같아요.

추가적으로, 비슷한 DTO가 매우 많다면 이런 고민을 할 수 있겠지만, 2개 정도면 저렇게 private method 추출로도 충분히 핸들링할 수 있다고도 생각합니다. 항상 중복 제거만이 능사는 아니니까요 ㅎㅎ

도움이 되셨기를 바랍니다.
감사합니다 🙂

0

조희제님의 프로필 이미지
조희제
질문자

감사합니다! 사실....똑같은 기능이 4~5개가 중복이 있습니다 ㅎㅎ...
어떻게 처리 할지 고민 이였는데 답변 감사합니다.
인터페이스를 적용 해서 개선해보겠습니다. 좋은 하루 되세요!