[백엔드] Java Stream API에서 map과 collect 사용하기

Java 8에서 도입된 Stream API는 데이터 컬렉션을 처리하는 데 매우 유용한 기능을 제공합니다. 이 글에서는 map과 collect 메소드를 활용하여 팀원 리스트를 효과적으로 가져오는 방법을 살펴보겠습니다

1. Stream API 개요

Stream API는 컬렉션의 데이터에 대해 연산을 수행할 수 있는 방법을 제공합니다. 특히, map과 collect는 데이터를 변환하고 수집하는 데 주로 사용되는 메소드입니다.

  • map: 스트림의 각 요소를 주어진 함수에 따라 변환합니다.
  • collect: 스트림의 요소를 컬렉션으로 수집합니다.

 

2. 예제: 팀원 리스트 가져오기

이제 팀원 리스트를 가져오는 예제를 통해 map과 collect의 사용법을 알아보겠습니다. 다음은 팀원 정보를 DTO(Data Transfer Object)로 변환하는 코드입니다.

// 팀원 리스트 가져오기
List<MemberDto> members = team.getTeamUsers().stream()
        .map(teamUser -> new MemberDto(
                teamUser.getUser().getName(),
                teamUser.getUser().getNickname(),
                teamUser.getUser().getPosition(),
                teamUser.getRole(),
                teamUser.getUser().getAgeRange()
        ))
        .collect(Collectors.toList());

2.1 코드 설명

  1. 팀 사용자 가져오기: team.getTeamUsers()를 호출하여 팀에 속한 사용자 리스트를 가져옵니다.
  2. Stream 생성: .stream() 메소드를 호출하여 리스트를 스트림으로 변환합니다.
  3. map 사용:
    • map 메소드는 각 teamUser 객체를 MemberDto 객체로 변환합니다.
    • 변환 과정에서 teamUser.getUser()를 통해 사용자 정보를 가져오고, 필요한 필드(name, nickname, position, role, ageRange)를 MemberDto 생성자에 전달합니다.
  4. collect 사용:
    • 최종적으로 collect(Collectors.toList())를 통해 변환된 MemberDto 객체를 리스트로 수집합니다.

이 과정을 통해 팀의 모든 사용자 정보를 포함하는 MemberDto 리스트를 생성할 수 있습니다.

 

3. map과 collect의 활용성

3.1 map의 장점

  • 코드 간결성: map을 사용하면 불필요한 반복문을 생략할 수 있어 코드가 간결해집니다.
  • 가독성: 데이터 변환 과정을 명확히 표현할 수 있어 코드의 가독성이 높아집니다.

3.2 collect의 유용성

  • 다양한 수집 방식: collect 메소드는 다양한 컬렉션으로 데이터를 수집할 수 있어 유연한 데이터 처리가 가능합니다. 예를 들어, toSet()을 사용하면 중복을 제거한 Set으로 수집할 수 있습니다.

4. 결론

Stream API의 map과 collect 메소드를 사용하면 데이터 변환과 수집을 효율적으로 처리할 수 있습니다. 위 예제를 통해 팀원 리스트를 간단히 가져오는 방법을 살펴보았으며, 이러한 접근 방식을 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.