- 문제:
@SuperBuilder 사용 시 필드에 직접 쓴 초기값(initializer)이 무시되어, 빌더로 생성하면 null 또는 기본형 값(0)이 됩니다. - 원인:
Lombok 빌더는 “사용자가 설정한 필드”만 객체에 할당하고, 나머지는 아예 건너뛰기 때문입니다. - 해결:
@Builder.Default를 초기값 필드 위에 붙여 두면, 빌더에서 값을 명시하지 않아도 선언된 초기화자를 실행해 줍니다.
`
@SuperBuilder
public class User {
@Builder.Default
private String name = "Anonymous";
@Builder.Default
private int age = 20;
}
User u = User.builder().build();
System.out.println(u.getName()); // Anonymous
System.out.println(u.getAge()); // 20
이처럼 @Builder.Default만 추가하면 빌더 생성 시에도 항상 기본값이 보장됩니다.