@Builder
@Builder
는 클래스의 복잡한 빌더 API를 생성하도록 도와준다Person.builder().name("김똔똔").age(26).build();
와 같이 사용할 수 있다@Data
@ToString
@EqualsandHashCode
@Getter
@Setter
@RequiredArgsConstructor
를 한번에 사용하는 어노테이션이다
@Builder
에 있어서 특징은 다음과 같다
- 빌더는 non-static non-final 필드에 대한 메소드만 만들어준다
- 단 RequiredArgsConstructor에 의해 초기화되지 않은 final 필드나 @NonNull 필드에 대해서는 생성자를 생성한다
- parameter가 없는 약한 생성자를 만들어준다
@Builder.Default
필드를 고정시키려는 의도라면 final 키워드를 설정해야 한다
하지만 명시적으로 초기화 한 뒤 상황에 따라 값을 변경시키고 싶은 경우가 있다
명시적 초기화를 통한 초기화를 진행시킨 다음에 빌더를 사용할 경우 다음과 같은 시나리오를 주의해야한다
- 명시적 초기화를 통한 객체 멤버 초기화
- 빌더를 통한 객체 필드 설정(명시적 초기화 필드는 설정하지 않음)
위의 상황에서 빌더는 특정 필드나 매개변수에 대한 선언을 해주지 않는다면 0 / null / false
를 설정한다
그렇기 때문에 명시적 초기화를 한 뒤 상황에 따라 값을 변경하고 싶을 경우엔 @Builder.Default
를 통해 위와 같이 변경되는 것을 방지 할 수 있다