본문 바로가기
반응형
Java

java entity -> dto 변환 stream, map, collect 사용 - 동작원리(1)

by brightGarden02 2023. 1. 2.

JPA를 활용하는 프로젝트에서 Entity를 직접 반환하기보다는, 데이터 보호와 DTO(Data Transfer Object)로 변환하는 경우가 많다.

 

entity를 dto로 변환하는 과정에서 stream, map, collect를 사용하였다. 동작원리를 알아보자.

 

 

 

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class AppointmentQueryService {

    private final AppointmentRepository appointmentRepository;
    private final MemberRepository memberRepository;
    private final DoctorRepository doctorRepository;

    public List<AppointmentDto> findAppointmentByEmail(String email) {

        Member member = findMember(email);

        List<Appointment> appointments = appointmentRepository.findByMemberId(member.getId());

        List<AppointmentDto> appointmentDtos = appointments
                .stream()
                .map(o -> new AppointmentDto(o))
                .collect(Collectors.toList());

        return appointmentDtos;
    }

AppointmentQueryService 클래스에서 findAppointmentByEmail() 메서드를 살펴보겠다.

findAppointmentByEmail() 메서드: 해당 email 멤버에 대한 예약 내역을 가져오는 메서드

 

 

 

List<AppointmentDto> appointmentDtos = appointments
        .stream()
        .map(o -> new AppointmentDto(o))
        .collect(Collectors.toList());

stream()은 List 또는 컬렉션 데이터를 순차적으로 처리할 수 있는 데이터 흐름을 생선한다. map은 각각의 요소를 반환하는 작업을 수행하며, 이 과정에서 Appointment 객체가 AppointmentDto로 변환된다. collect는 반환된 데이터를 다시 List로 수집한다.

 

 

 

Stream API는 내부적으로 Spliterator를 사용하여 데이터의 순차적 또는 병렬적 처리를 지원한다. 이는 데이터 흐름을 효율적으로 처리할 수 있도록 설계되었다.

댓글


반응형
반응형