인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지
감바스

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (3)

정적 팩토리 메서드 사용과 toEntity 메서드에 대해 질문 있습니다.

작성

·

35

0

우선 빌더를 활용해 내부에서 객체를 생성하고 외부에서 해당 객체를 생성하려면 정적 팩토리 메서드를 사용하거나 혹은 toEntity 같은 메서드를 만들어 사용하면 좋을거 같다 라는 생각이 들었습니다. 궁금한 점은 외부에서 객체를 생성할때 어떤 경우에는 정적 팩토리 메서드를 사용해서 생성하고 어떤 경우에는 toEntity 같은 메서드를 만들어서 사용하면 좋을지 궁금합니다.

@Getter
@NoArgsConstructor
public class ProductCreateServiceRequest {

    private ProductType type;
    private ProductSellingStatus sellingStatus;
    private String name;
    private int price;

    @Builder
    private ProductCreateServiceRequest(ProductType type, ProductSellingStatus sellingStatus, String name, int price) {
        this.type = type;
        this.sellingStatus = sellingStatus;
        this.name = name;
        this.price = price;
    }

    public Product toEntity(String nextProductNumber) {
        return Product.builder()
            .productNumber(nextProductNumber)
            .type(type)
            .sellingStatus(sellingStatus)
            .name(name)
            .price(price)
            .build();
    }

}

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 감바스 님!

우선, 정적 팩토리 메서드와 toEntity()가 반대되는 개념은 아닌 것 같아요.
toEntity()에서 Product의 정적 팩토리 메서드를 사용할 수도 있으니까요.

toEntity()는 말 그대로 DTO 내에서 DTO가 가진 데이터로 Entity 객체를 생성할 때 주로 붙이는 메서드명인데요. (반드시 그런 것은 아니고 관습적인 이름이라 이해해주시면 됩니다.)
정적 팩토리 메서드는 이와 관계없이, 단순한 생성자 대신 객체의 생성 방식을 제한하면서 외부에 의도를 전달하기 위한 방법입니다.

위와 같이 각 방법의 의도에 맞게 사용해주시면 됩니다.

감사합니다. 🙂

0

안녕하세요, 인프런 AI 인턴입니다.

감바스님, 정적 팩토리 메서드와 toEntity 메서드의 사용에 대한 질문을 주셨네요. 두 방법의 사용 용례는 다음과 같습니다.

  1. 정적 팩토리 메서드:

    • 정적 팩토리 메서드는 클래스 내부에서 인스턴스를 생성하는 방법으로 추가적인 의도를 표현하거나 인스턴스를 생성하는 로직을 숨기고 싶을 때 유용합니다.
    • 예를 들어, 생성 과정에서 특정 로직을 적용해야 하거나 불변 객체를 받을 경우, 이름을 통해 동작을 명확히 표현할 수 있습니다.
  2. toEntity 메서드:

    • 이 메서드는 주로 DTO(Data Transfer Object)를 엔티티로 변환할 때 사용합니다.
    • toEntity 메서드는 적절한 시점에 DTO의 데이터를 바탕으로 엔티티 객체를 생성할 필요가 있을 때 유용합니다. 예를 들어, 요청 객체를 엔티티로 변환하여 데이터베이스에 저장하거나 추가적인 비즈니스 로직을 적용하고 싶을 때 사용할 수 있습니다.

따라서, 객체 생성을 통해 추가적인 의미와 로직을 적용하고 싶다면 정적 팩토리 메서드를 고려하시고, DTO에서 변환할 엔티티가 필요한 경우에는 toEntity 메서드를 활용하시면 좋습니다.

추가 정보를 원하시면, Spring Data JDBC의 관련 문서를 참고해 보세요: Spring Data JDBC Reference.

감사합니다. 도움이 되셨길 바랍니다!

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기