정적 팩토리 메서드 네이밍의 차이 (of vs from)
2024. 11. 4. 17:12ㆍJava
public record FindCouponsResponse(List<FindCouponResponse> coupons) {
public static FindCouponsResponse from(final List<Coupon> coupons) {
return coupons.stream()
.map(FindCouponResponse::from)
.collect(Collectors.collectingAndThen(Collectors.toList(), FindCouponsResponse::new));
}
public record FindCouponResponse(Long couponId, String name, String description, Integer discount, LocalDate endAt) {
public static FindCouponResponse from(final Coupon coupon) {
return new FindCouponResponse(
coupon.getId(),
coupon.getName(),
coupon.getDescription(),
coupon.getDiscount(),
coupon.getEndAt());
}
}
}
public record FindCartItemsResponse(List<FindCartItemResponse> cartItems) {
public static FindCartItemsResponse from(final List<FindCartItemResponse> cartItemsResponse) {
return new FindCartItemsResponse(cartItemsResponse);
}
}
public record FindCartItemResponse(Long cartId, Long itemId, Integer quantity) {
public static FindCartItemResponse of(final long cartId, final long itemId, final Integer quantity) {
return new FindCartItemResponse(cartId, itemId, quantity);
}
}
왜 위 아래의 코드를 같은 형식의 포맷으로 작성하지 않고, 나뉘는가에 대한 궁금증에 의한 글입니다.
// 1) of 사용 - 단순 파라미터 전달 public static FindCartItemResponse of(Long cartId, Long itemId, int quantity) { return new FindCartItemResponse(cartId, itemId, quantity); }
// 2) from 사용 - 다른 객체로부터의 변환 public static FindCouponResponse from(final Coupon coupon) { return new FindCouponResponse( coupon.getId(), coupon.getName(), coupon.getDescription(), coupon.getDiscount(), coupon.getEndAt() ); }
- of: 주로 단순히 파라미터들을 모아서 인스턴스를 생성할 때 사용
- from: 다른 타입의 객체를 변환하여 새로운 인스턴스를 생성할 때 사용
// 1) 분리된 구조
public record FindCartItemResponse(Long cartId, Long itemId, int quantity) { ... }
public record FindCartItemsResponse(List<FindCartItemResponse> cartItems) { ... }
// 2) 중첩된 구조
public record FindCouponsResponse(List<FindCouponResponse> coupons) {
public record FindCouponResponse(...) { ... }
}
- 분리된 구조: 두 record가 독립적으로 존재
- 중첩된 구조: 응답 객체가 논리적으로 강하게 연관되어 있음을 표현
// 1) 단순 List 래핑
public static FindCartItemsResponse from(List<FindCartItemResponse> responses) {
return new FindCartItemsResponse(responses);
}
// 2) Stream을 사용한 복잡한 변환
public static FindCouponsResponse from(List<Coupon> coupons) {
return coupons.stream()
.map(FindCouponResponse::from)
.collect(Collectors.collectingAndThen(
Collectors.toList(),
FindCouponsResponse::new
));
}
같은 내용이다.
'Java' 카테고리의 다른 글
JWT 그런데 OAuth2.0 곁들인 (2) (1) | 2024.11.10 |
---|---|
JWT 그런데 OAuth2.0 곁들인 (1) | 2024.11.08 |
SSE(Server-Sent Events) (0) | 2024.11.06 |
QueryDSL 아이템 목록 페이징 처리 (0) | 2024.10.31 |
StringUtils 라이브러리 (0) | 2024.10.29 |