본문 바로가기
SpringBoot/ETC

@Builder 사용 시 주의 점

by BAYABA 2021. 10. 8.
  1. 개인 공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.

목차

  1. Intro
  2. 클래스 위에 @Builder 사용 시 문제점
  3. Builder Pattern Implementation

1. Intro

  1. 올바른 @Builder 사용을 위해 아래 두 가지 사항에 대해 알아보겠습니다.
  • 클래스 위에 @Builder 사용 시 발생하는 문제점
  • @Builder 어노테이션 기능을 실제 구현한다면 어떤 식으로 코드가 작성되는지

2. 클래스 위에 @Builder 사용 시 문제점

  1. 클래스 위에 @Builder를 선언하면 모든 멤버 필드에 대해서 매개변수를 받는 생성자를 만듭니다.
  • 이 경우 Id, createAt, updateAt 같이 객체 생성 시 받지 않아야 할 데이터들도 빌더에 노출이 됩니다.
  • 그러므로 객체 생성 시 받아야할 데이터들만 Parameter로 받는 생성자를 만들고 그 위에 @Builder를 붙이는 게 바람직합니다.
  1. 클래스 위에 @Builder를 선언하면 생성자의 접근 레벨이 default가 되므로 동일 패키지 내에서 해당 생성자를 호출할 수 있는 문제가 있습니다.

3. Builder Pattern Implementation

  1. @Builder 어노테이션 대신 빌터 패턴을 직접 구현한다면 아래와 같은 형태로 빌더 코드가 추가될 것입니다.
  • 중요한 건, 빌더가 build() 메서드 호출로 최종 시점에 객체를 생성하는데 사용할 생성자를 Entity쪽에서 뚫어놔줘야 한다는 점입니다.
public class PersonInfoBuilder {
    private String name;
    private Integer age;
    private String favoriteColor;
    private String favoriteAnimal;
    private Integer favoriteNumber;

    public PersonInfoBuilder setName(String name) {
        this.name = name;
        return this;
    }

    public PersonInfoBuilder setAge(Integer age) {
        this.age = age;
        return this;
    }

    public PersonInfoBuilder setFavoriteColor(String favoriteColor) {
        this.favoriteColor = favoriteColor;
        return this;
    }

    public PersonInfoBuilder setFavoriteAnimal(String favoriteAnimal) {
        this.favoriteAnimal = favoriteAnimal;
        return this;
    }

    public PersonInfoBuilder setFavoriteNumber(Integer favoriteNumber) {
        this.favoriteNumber = favoriteNumber;
        return this;
    }

    public PersonInfo build(){
        PersonInfo personInfo = new PersonInfo(name, age, favoriteColor, favoriteAnimal, favoriteNumber);
        return personInfo;
    }
}

출처

  1. 실무에서 Lombok 사용법
  2. Lombok 사용법과 주의사항
  3. 빌더 패턴(Builder Pattern)

'SpringBoot > ETC' 카테고리의 다른 글

SQL 보기 옵션 정리  (0) 2021.10.14
SpringBoot에 MYSQL 연동  (0) 2021.10.14
생성자 주입 방식의 장점  (0) 2021.10.01