[JPA] @Builder.DefaultBack-End/JPA2025. 4. 4. 00:27
      Table of Contents
        @Builder.Default는 Lombok의 @Builder와 함께 사용할 때, 기본값이 무시되지 않도록 유지시켜주는 어노테이션이다.
일반적으로 @Builder를 사용하면, 필드에 직접 초기화한 값이 무시된다.
@Builder
public class Product {
    private String name;
    private int price = 1000;
}
위와 같이 price = 1000을 설정했더라도, Product.builder().build()를 실행하면 price는 0이 된다.
즉, 기본값 1000이 무시되는 것.
해결 방법
@Builder
public class Product {
    private String name;
    @Builder.Default
    private int price = 1000;
}
이렇게 하면 Product.builder().build()를 했을 때, price 값이 명시적으로 지정되지 않으면 1000이 자동으로 설정된다.
어떻게 동작하나?
Lombok은 내부적으로 @Builder.Default가 붙은 필드를 빌더 내부에서 null 체크를 통해 기본값 유지하는 코드로 바꿔준다.
@Builder
public class User {
    private String username;
    @Builder.Default
    private boolean active = true;
    @Builder.Default
    private List<String> roles = new ArrayList<>();
}
- User.builder().username("abc").build() → active == true, roles == []로 자동 설정됨
 
생성자 위에 @Builder를 붙이면 @Builder.Default는 필요 없다.
왜냐하면 생성자 기반 빌더는 필드 초기값이 아니라, 생성자 파라미터로 모든 값을 설정하기 때문이다.
즉, 초기값이 아예 사용되지 않기 때문에, @Builder.Default는 무의미하다.
public class Product { private String name; private int price = 1000; @Builder public Product(String name, int price) { this.name = name; this.price = price; } }
'Back-End > JPA' 카테고리의 다른 글
| [JPA] 엔티티 클래스에서 @Builder 위치 (0) | 2025.04.03 | 
|---|---|
| [JPA] 엔티티 공통 필드 상속(@MappedSuperclass) (0) | 2025.04.03 | 
| [JPA]PostgreSQL 사용시, 엔티티에 Enum 매핑 오류 (0) | 2024.11.21 | 
| [Spring Data JPA] Projections 과 Native Query (0) | 2024.08.16 | 
| [Spring Data JPA] 새로운 엔티티인지 구별하는 방법 (0) | 2024.08.15 |