ProductInfoDto 살펴보기
ProductInfoDto는 제품에 대한 정보를 응답에 맞게 변환하여 저장하는 클래스이다.
- DTO 클래스이다.
- 반환되는 데이터 형식으로 사용된다.
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ProductInfoDto {
private Long productId;
private List<String> imgFiles;
private String name;
private Integer price;
private String code;
private String size;
private String detailInfo;
public ProductInfoDto(Product product, List<String> productAccessImgUrl, String detailInfoAccessImgUrl) {
this.productId = product.getProductId();
this.imgFiles = productAccessImgUrl;
this.name = product.getName();
this.price = product.getPrice();
this.code = product.getCode();
this.size = product.getSize();
this.detailInfo = detailInfoAccessImgUrl;
}
}
ProductInfoDto 분석하기
1. Anntation
- @Getter
기능 : 클래스에 선언된 필드에 대해 get 메서드를 자동 생성한다.
분석 : Entity 클래스의 경우 필드에 대한 접근 제한을 위해 private로 선언되었다. 따라서 필드 값에 접근하기 위한 별도의 방법이 필요하며 @Getter를 사용하는 방식을 채택하였다.
- @Setter
기능 : 클래스에 선언된 필드를 초기화하는 set 메서드를 자동 생성한다.
분석 : Product Entity의 toInfoDto에서 infoDto 생성시 builder를 이용하고 있다. 따라서 해당 annotation은 필요가 없어졌기에 제거하는 것이 적절하다.
- @ToString
기능 : 클래스에 선언된 필드를 '변수명=값' 형태의 문자열로 출력한다.
분석 : 해당 Annotation은 Test를 위해서만 사용되고 있다. 빌드시 파일의 용량을 굳이 키울 필요가 없기 때문에 Test에서 해당 기능을 대체할 수 있는 메서드를 구현하고 사용하는 것이 더 적합해 보인다.
- @NoArgsConstructor
기능 : 매개변수가 없는 생성자를 자동 생성한다.
분석 : 현재 사용되지 않고 있어 아무런 의미가 없어진 생성자이다. 따라서 제거하는 것이 적절하다.
2. Field
- private Long productId
기능 : 제품 기본키를 저장하기 위한 필드이다.
분석 : private는 필드에 대한 접근 제한을 위해 사용하였고, null을 확실히 구분하기 위해 Wrapper Long 사용하였다.
- private List<String> imgFiles
기능 : 제품 이미지에 대한 접근 url를 저장하는 필드이다.
분석 : 단순히 Product Entity의 데이터를 저장하는 필드이다.
- private String name
기능 : 제품 이름을 저장하기 위한 필드이다.
분석 : 단순히 Product Entity의 데이터를 저장하는 필드이다.
- private Integer price
기능 : 제품 가격을 저장하기 위한 필드이다.
분석 : 단순히 Product Entity의 데이터를 저장하는 필드이다.
- private String code
기능 : 제품 분류코드를 저장하기 위한 필드이다.
분석 : 단순히 Product Entity의 데이터를 저장하는 필드이다.
- private String size
기능 : 제품 유효 사이즈를 저장하기 위한 필드이다.
분석 : 단순히 Product Entity의 데이터를 저장하는 필드이다.
- private String detailInfo
기능 : 제품 상세설명 이미지 경로를 저장하기 위한 필드이다.
분석 : 제품 상세이미지 url을 저장하는 필드이다.
3. Method
- public ProductInfoDto(Product product, List<String> productAccessImgUrl, String detailInfoAccessImgUrl)
기능 : 매개변수로 받은 값을 이용해 infoDto의 필드값을 초기화한다.
분석 : Product Entity에서 builder를 이용해 ProductInfoDto 인스턴스의 필드값을 초기화한다. 따라서 @Builder와 @AllArgsConstructor를 클래스 단위에 선언한 뒤 해당 메서드를 제거하는 것이 적절하다.
ProductInfoDto 리팩토링
수정된 경우 ■ 색, 추가된 경우 ■ 색, 삭제된 경우 ■ 색으로 표시하였다. 수정된 코드는 다음과 같다.
@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ProductInfoDto {
private Long productId;
private List<String> imgFiles;
private String name;
private Integer price;
private String code;
private String size;
private String detailInfo;
}
1. Annotaion
- @Setter
builder 방식을 이용하기 때문에 해당 Annotation은 제거하는 것이 적절하다고 판단하였다.
- @ToString
해당 기능은 테스트에서만 사용되기 때문에 메인 코드에선 필요없다고 판단하여 제거하였다.
- @NoArgsConstructor
현재 사용하지 않아 의미없는 Annotation이라고 판단하여 제거하였다.
- @Builder
@Setter도 사용이 가능하지만 필드 초기화의 편의성과 안정성을 위해 선언하였다.
- @AllArgsConstructor(access = AccessLevel.PRIVATE)
ProductInfoDto의 모든 필드가 초기화되어야 하며 인스턴스 생성 방식은 builder로 통일하기 위해 PRIVATE 옵션을 설정하였다.
2. Field
3. Method
- public ProductInfoDto(Product product, List<String> productAccessImgUrl, String detailInfoAccessImgUrl)
@Builder와 @AllArgsConstructor를 사용하기 때문에 해당 생성자를 제거하였다.
'개발서 > ToyProject-Smart' 카테고리의 다른 글
| [Toy - Smart] ProductServiceImpl 리팩토링 (0) | 2023.02.26 |
|---|---|
| [Toy - Smart] ProductDao 구현 (0) | 2023.02.25 |
| [Toy - Smart] ProductUpdateDto 리팩토링 (0) | 2023.02.25 |
| [Toy - Smart] ProductSaveDto 리팩토링 (0) | 2023.02.25 |
| [Toy - Smart] Product 리팩토링 (0) | 2023.02.25 |
댓글