변환할게 많아서 코드량이 좀 된다.

@GetMapping("/api/v2/orders")
public List<OrderDTO> ordersV2() {
	List<Order> orders = orderRepository.findAll(new OrderSearch());

	List<OrderDTO> collect = orders.stream()
			.map(o -> new OrderDTO(o))
			.collect(Collectors.toList());

	return collect;
}

@Data
static class OrderDTO {

	private Long orderId;
	private String name;
	private LocalDateTime orderDate;
	private OrderStatus orderStatus;
	private Address address;
	private List<OrderItem> orderItems;

	public OrderDTO(Order order) {
		orderId = order.getId();
		name = order.getMember().getName();
		orderDate = order.getOrderDate();
		orderStatus = order.getStatus();
		address = order.getDelivery().getAddress();
		orderItems = order.getOrderItems();
	}
}

초기화를 추가하면 된다?

@Data
static class OrderDTO {

	private Long orderId;
	private String name;
	private LocalDateTime orderDate;
	private OrderStatus orderStatus;
	private Address address;
	private List<OrderItem> orderItems;

	public OrderDTO(Order order) {
		orderId = order.getId();
		name = order.getMember().getName();
		orderDate = order.getOrderDate();
		orderStatus = order.getStatus();
		address = order.getDelivery().getAddress();
		order.getOrderItems().stream().forEach(o -> o.getItem().getName());
		orderItems = order.getOrderItems();
	}
}

DTO에서 뎁스를 변경해도 된다. 굳이 item을 또 DTO만들어서 하기 보단 orderItemDTO에서 꺼내서 만들면 된다.

@GetMapping("/api/v2/orders")
public List<OrderDTO> ordersV2() {
	List<Order> orders = orderRepository.findAll(new OrderSearch());

	List<OrderDTO> collect = orders.stream()
			.map(OrderDTO::new)
			.collect(Collectors.toList());

	return collect;
}

@Getter
static class OrderDTO {

	private Long orderId;
	private String name;
	private LocalDateTime orderDate;
	private OrderStatus orderStatus;
	private Address address;
	private List<OrderItemDTO> orderItems;

	public OrderDTO(Order order) {
		orderId = order.getId();
		name = order.getMember().getName();
		orderDate = order.getOrderDate();
		orderStatus = order.getStatus();
		address = order.getDelivery().getAddress();
		orderItems = order.getOrderItems().stream()
				.map(OrderItemDTO::new)
				.collect(Collectors.toList());
	}
}

@Getter
static class OrderItemDTO {

	private String itemName;
	private int orderPrice;
	private int count;

	public OrderItemDTO(OrderItem orderItem) {
		itemName = orderItem.getItem().getName();
		orderPrice = orderItem.getTotalPrice();
		count = orderItem.getCount();
	}
}

SQL이 몇번 실행될까?