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

Young.K님의 프로필 이미지
Young.K

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 등록

정적 팩토리 메서드 작성

해결된 질문

작성

·

378

4

@Entity
@DiscriminatorValue("B")
@Getter
@Setter
public class Book extends Item {

    private String author;

    private String isbn;

    public static Book createBook(String name, int price, int stockQuantity, String author, String isbn) {
        Book book = new Book();
        book.setName(name);
        book.setPrice(price);
        book.setStockQuantity(stockQuantity);
        book.setAuthor(author);
        book.setIsbn(isbn);
        return book;
    }

}

setter들을 최대한 줄이고자 위와 같이 정적 팩토리 메서드를 작성했습니다.

그런데 결국 Book 객체를 만들기 위해선 createBook안에 setter가 필요하게 되더라구요

그래서 setter을 닫으면서 정적 팩토리 메서드를 작성하기 위한 두가지 방법이 생각났는데요

첫 번째는 생성자를 protected으로 만들어놓고 정적 팩토리 메서드에서 setter가 아닌 생성자로 객체를 생성하는 방법이고

두 번째로 setter의 접근 권한을 private으로 설정하여 정적 팩토리 메서드 안에서만 setter을 사용하도록 허가하는 방법입니다.

두 방법 중에 무엇이 더 사용하기 적합한지, 아니면 그 외에 다른 방법엔 어떤 것이 있는지 궁금합니다.

/// 추가

강의를 진행하다보니 두 방법 모두 setter의 부재로 변경 감지 방법을 사용하지 못한다는 문제점이 있는 것 같습니다..

변경 감지 강의에서의 영한님 말씀처럼 setter 대신에 비즈니스 메서드를 만들어서 변경 감지 등의 로직에서 사용하고, 정적 팩토리 메서드에서는 첫 번째 방법처럼 생성자로 객체를 생성하는 방법을 사용하려고 하는데 옳은 방법일까요?

답변 1

5

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Young.K님^^

첫번째는 두 방법중 편한 방법을 사용하시면 됩니다.

추가 질문은 생각하신 내용이 맞습니다.

감사합니다.

Young.K님의 프로필 이미지
Young.K

작성한 질문수

질문하기