[lombok] @Builder

@Builder

@Builder는 클래스의 복잡한 빌더 API를 생성하도록 도와준다
Person.builder().name("김똔똔").age(26).build();와 같이 사용할 수 있다
@Data @ToString @EqualsandHashCode @Getter @Setter @RequiredArgsConstructor를 한번에 사용하는 어노테이션이다

@Builder에 있어서 특징은 다음과 같다

  1. 빌더는 non-static non-final 필드에 대한 메소드만 만들어준다
    • 단 RequiredArgsConstructor에 의해 초기화되지 않은 final 필드나 @NonNull 필드에 대해서는 생성자를 생성한다
  2. parameter가 없는 약한 생성자를 만들어준다

@Builder.Default

필드를 고정시키려는 의도라면 final 키워드를 설정해야 한다
하지만 명시적으로 초기화 한 뒤 상황에 따라 값을 변경시키고 싶은 경우가 있다
명시적 초기화를 통한 초기화를 진행시킨 다음에 빌더를 사용할 경우 다음과 같은 시나리오를 주의해야한다

  1. 명시적 초기화를 통한 객체 멤버 초기화
  2. 빌더를 통한 객체 필드 설정(명시적 초기화 필드는 설정하지 않음)

위의 상황에서 빌더는 특정 필드나 매개변수에 대한 선언을 해주지 않는다면 0 / null / false를 설정한다
그렇기 때문에 명시적 초기화를 한 뒤 상황에 따라 값을 변경하고 싶을 경우엔 @Builder.Default를 통해 위와 같이 변경되는 것을 방지 할 수 있다

참조

https://projectlombok.org/features/Builder

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/10/Languages/Java/builder/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.