정적 팩토리 메서드 (Static Factory Method)

왕감자·2025년 2월 17일

2025 내일배움캠프

목록 보기
14/39

DTO 생성

🤔 생성자를 제한하는 이유?

  • 생성자는 이름을 가지지 않음
    ▻ 어떤 생성자인지 모름
    ▻ 메서드 이름으로 가이드라인이 정해져 있지 않음
    잘못된 생성자를 부를 가능성이 있음

🤔 필드가 많아졌을때? 빌더 사용?

  • 필드들의 타입이 똑같을때, 파라미터 순서가 바뀌었을 경우 컴파일 오류가 나지 않음
    ➡ 빌더를 써서 명확하게~!

생성자 + 빌더 + 정적팩토리메서드




정적 팩토리 메서드

✨ 객체의 생성을 담당하는 클래스 메서드

  • 이름을 가질 수 있음
  • 호출 될 때마다 인스턴스를 새로 생성하지 않아도 됨
  • 반환 타입의 하위 타입 객체를 반환할 수 있음
  • 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있음
  • 정적 팩토리 메서드를 작성하는 시점에 반환할 객체의 클래스가 존재하지 않아도 됨

🤔 of? from?

  • of : 명확한 값들로 직접 객체 생성
  • from : 다른 객체를 변환하여 생성

근데 이번 프로젝트에서는 다 of를 씀.. 포괄적으로 씀?


🔹 생성자(private) + Builder + 정적팩토리메서드(public)

	@Builder
    private Review(String content, int rating, Member member, Order order, Shop shop) {
        this.content = content;
        this.rating = rating;
        this.member = member;
        this.order = order;
        this.shop = shop;
    }


    public static Review addOf(ReviewRequestDto dto, Order order) {
        return Review.builder()
                .content(dto.content())
                .rating(dto.rating())
                .order(order)
                .member(order.getMember())
                .shop(order.getShop())
                .build();
    }

🔹 Only 생성자(public)

public Review(String content, int rating, Member member, Order order, Shop shop) {
        this.content = content;
        this.rating = rating;
        this.member = member;
        this.order = order;
        this.shop = shop;
    }
// 객체 직접 생성해야 함
Review review = new Review(
        dto.content(),
        dto.rating(),
        order.getMember(),
        order,
        order.getShop()
);

생성자만 쓰면

  • 가독성 떨어짐
  • 필드 많을수록 유지보수 어려움
  • 외부에서 객체 생성이 자유로움

0개의 댓글