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를 사용하여 데이터의 순차적 또는 병렬적 처리를 지원한다. 이는 데이터 흐름을 효율적으로 처리할 수 있도록 설계되었다.
'Java' 카테고리의 다른 글
[Java] 입력할 때 날짜규칙 설정: 허용 O or X - dateFormat.setLenient(false) (0) | 2023.01.13 |
---|---|
[JAVA] List, ArrayList 차이 (0) | 2023.01.04 |
json을 flat(parameter-delimiter)파일로 변환하기(json 파싱) (0) | 2022.12.16 |
[Java] 인코딩(Encoding)된 데이터를 디코딩(Decoding)하기 (0) | 2022.12.14 |
[Java] json 파일 읽기, 파싱 -Mac (0) | 2022.12.13 |
댓글