product(AddProductCartForm, AddProductForm, AddProductItemForm, UpdateProductForm, UpdateProductItemForm)
AddProductCartForm
package com.zerobase.cms.order.domain.product;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductCartForm {
private Long id;
private Long sellerId;
private String name;
private String description;
private List<ProductItem> items;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class ProductItem {
private Long id;
private String name;
private Integer count;
private Integer price;
}
}
장바구니 상품 추가 폼 (AddProductCartForm)
이 코드는 장바구니에 상품을 추가하기 위한 폼 데이터를 담는 클래스(AddProductCartForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductCartForm은 상품 ID, 판매자 ID, 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.
1. 클래스 구조 및 어노테이션
- import java.util.List;: List 인터페이스를 가져옵니다. List는 순서가 있는 데이터 컬렉션을 나타냅니다.
- import lombok.AllArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 모든 필드를 인수로 받는 생성자를 자동으로 생성해줍니다.
- import lombok.Builder;: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다.
- import lombok.Getter;: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다.
- import lombok.NoArgsConstructor;: Lombok 라이브러리의 어노테이션으로, 인수가 없는 기본 생성자를 자동으로 생성해줍니다.
- @Getter: Lombok 라이브러리의 어노테이션으로, 모든 필드에 대한 getter 메서드를 자동으로 생성해줍니다. getter 메서드는 객체의 필드 값을 외부에서 읽을 수 있도록 해줍니다.
- @Builder: Lombok 라이브러리의 어노테이션으로, 빌더 패턴을 자동으로 생성해줍니다. 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어줍니다.
2. 클래스 필드
- private Long id;: 상품 ID를 나타내는 속성입니다. private은 이 필드가 AddProductCartForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
- private Long sellerId;: 판매자 ID를 나타내는 속성입니다.
- private String name;: 상품 이름을 나타내는 속성입니다.
- private String description;: 상품 설명을 나타내는 속성입니다.
- private List<ProductItem> items;: 상품 아이템 목록을 나타내는 속성입니다. ProductItem은 AddProductCartForm 클래스 내부에 정의된 내부 클래스입니다.
3. 내부 클래스 (Inner Class): ProductItem
- @Getter @Builder @NoArgsConstructor @AllArgsConstructor public static class ProductItem { ... }: ProductItem 클래스를 정의합니다.
- public static class ProductItem { ... }: ProductItem 클래스를 정의합니다. public은 이 클래스가 모든 클래스에서 접근 가능하다는 것을 의미합니다. static은 이 클래스가 외부 클래스의 객체에 의존하지 않음을 나타냅니다.
- @Getter @Builder @NoArgsConstructor @AllArgsConstructor: Lombok 어노테이션은 위에서 설명한 것과 동일합니다.
- private Long id;: 상품 아이템 ID를 나타내는 속성입니다.
- private String name;: 상품 아이템 이름을 나타내는 속성입니다.
- private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.
- private Integer price;: 상품 아이템 가격을 나타내는 속성입니다.
4. 핵심 개념 및 추가 설명
- 폼 데이터 (Form Data): 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. 폼 데이터는 HTML 폼 요소를 통해 수집되며, HTTP 요청 body에 담겨 서버로 전송됩니다.
- DTO (Data Transfer Object): DTO는 서비스 간에 데이터를 주고받을 때 사용되는 객체입니다. DTO는 데이터베이스의 엔티티와 유사하지만, 영속성을 가지지 않고 단순히 데이터를 담는 역할만 합니다. DTO를 사용하면 엔티티의 모든 속성을 노출하지 않고 필요한 속성만 선택적으로 전송할 수 있으며, 데이터 전송량을 줄일 수 있습니다.
- 빌더 패턴 (Builder Pattern): 빌더 패턴은 객체 생성을 더 유연하고 가독성 좋게 만들어주는 디자인 패턴입니다. 빌더 패턴을 사용하면 객체 생성 시 필요한 필드만 선택적으로 설정할 수 있습니다.
- 내부 클래스 (Inner Class): 내부 클래스는 다른 클래스 내부에 정의된 클래스입니다. 내부 클래스는 외부 클래스의 멤버에 접근할 수 있으며, 코드 캡슐화를 높이는 데 사용됩니다. 내부 클래스는 static으로 선언될 수 있으며, 이 경우 외부 클래스의 객체에 의존하지 않고 독립적으로 사용할 수 있습니다.
AddProductForm
package com.zerobase.cms.order.domain.product;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductForm {
private String name;
private String description;
private List<AddProductItemForm> items;
}
상품 추가 폼 (AddProductForm)
이 코드는 새로운 상품을 추가하기 위한 폼 데이터를 담는 클래스(AddProductForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductForm은 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.
1. 클래스 필드
- private String name;: 상품 이름을 나타내는 속성입니다. private은 이 필드가 AddProductForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
- private String description;: 상품 설명을 나타내는 속성입니다.
- private List<AddProductItemForm> items;: 상품 아이템 목록을 나타내는 속성입니다. AddProductItemForm은 각각의 상품 아이템에 대한 정보를 담는 클래스입니다.
AddProductItemForm
package com.zerobase.cms.order.domain.product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddProductItemForm {
private Long productId;
private String name;
private Integer price;
private Integer count;
}
상품 아이템 추가 폼 (AddProductItemForm)
이 코드는 새로운 상품 아이템을 추가하기 위한 폼 데이터를 담는 클래스(AddProductItemForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. AddProductItemForm은 상품 ID, 상품 아이템 이름, 가격, 수량 등의 정보를 저장합니다.
1. 클래스 필드
- private Long productId;: 상품 ID를 나타내는 속성입니다. private은 이 필드가 AddProductItemForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
- private String name;: 상품 아이템 이름을 나타내는 속성입니다.
- private Integer price;: 상품 아이템 가격을 나타내는 속성입니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
- private Integer count;: 상품 아이템 수량을 나타내는 속성입니다.
UpdateProductForm
package com.zerobase.cms.order.domain.product;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateProductForm {
private Long id;
private String name;
private String description;
private List<UpdateProductItemForm> items;
}
상품 수정 폼 (UpdateProductForm)
이 코드는 기존 상품 정보를 수정하기 위한 폼 데이터를 담는 클래스(UpdateProductForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. UpdateProductForm은 상품 ID, 상품 이름, 상품 설명, 상품 아이템 목록 등의 정보를 저장합니다.
1. 클래스 필드
- private Long id;: 상품 ID를 나타내는 속성입니다. 이 값은 수정할 상품을 식별하는 데 사용됩니다. private은 이 필드가 UpdateProductForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
- private String name;: 상품 이름을 나타내는 속성입니다. 수정할 상품의 새로운 이름을 담습니다.
- private String description;: 상품 설명을 나타내는 속성입니다. 수정할 상품의 새로운 설명을 담습니다.
- private List<UpdateProductItemForm> items;: 상품 아이템 목록을 나타내는 속성입니다. 각 상품 아이템에 대한 수정 정보를 담고 있는 UpdateProductItemForm 객체의 리스트입니다.
UpdateProductItemForm
package com.zerobase.cms.order.domain.product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateProductItemForm {
private Long id;
private String name;
private Integer price;
private Integer count;
}
상품 아이템 수정 폼 (UpdateProductItemForm)
이 코드는 기존 상품 아이템 정보를 수정하기 위한 폼 데이터를 담는 클래스(UpdateProductItemForm)입니다. 폼 데이터는 사용자가 웹 페이지나 애플리케이션에서 입력한 데이터를 서버로 전송하기 위해 사용됩니다. UpdateProductItemForm은 상품 아이템 ID, 상품 아이템 이름, 가격, 수량 등의 정보를 저장합니다.
1. 클래스 필드
- private Long id;: 상품 아이템 ID를 나타내는 속성입니다. 이 값은 수정할 상품 아이템을 식별하는 데 사용됩니다. private은 이 필드가 UpdateProductItemForm 클래스 내에서만 접근 가능하다는 것을 의미합니다.
- private String name;: 상품 아이템 이름을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 이름을 담습니다.
- private Integer price;: 상품 아이템 가격을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 가격을 담습니다. Integer는 int 타입의 래퍼 클래스이며, null 값을 가질 수 있습니다.
- private Integer count;: 상품 아이템 수량을 나타내는 속성입니다. 수정할 상품 아이템의 새로운 수량을 담습니다.