개발천재

[Spring Boot] @Builder, 객체를 더 깔끔하게 생성하는 방법 본문

개발 준비/Spring Boot

[Spring Boot] @Builder, 객체를 더 깔끔하게 생성하는 방법

세리블리 2025. 2. 24. 23:14
반응형

@Buildeer 이해하기

@Builder는 Lombok에서 제공하는 어노테이션으로, 객체를 보다 간편하게 생성할 수 있도록 도와주는 역할을 한다. 특히, 생성자 파라미터가 많을 때 가독성을 높이고, 유연하게 객체를 생성할 수 있다는 특징이 있다.

[ @Builder 간단 정리 ]
@Builder는 객체를 유연하고 가독성 있게 생성할 수 있도록 도와주는 Lombok 어노테이션
생성자 매개변수 순서를 신경 쓰지 않고 명확하게 값 설정 가능
@Builder.Default를 사용하면 기본값을 설정할 수도 있음
특정 생성자만 @Builder에서 사용할 수도 있음

 

 


 

 

기본적인 사용법

JPA에서 @Entity와 함께 사용할 때는 @NoArgsConstructor도 추가하는 게 좋다.

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder

@NoArgsConstructor // 기본 생성자

@AllArgsConstructor // 모든 필드를 받는 생성자
public class User {
    private Long id;
    private String name;
    private String email;
}

 


일반적으로 객체를 만드려면 아래와 같이 사용해야한다.

일반적으로 생성자를 사용할 경우, 매개변수 순서를 정확히 맞춰야 해서 실수할 가능성이 높다.

User user1 = new User(1L, "Alice", "alice@example.com");  // 생성자 사용 (순서 중요!)



@Builder를 사용하여 객체를 만들 경우 아래과 같이 사용할 수 있다.

User user2 = User.builder()
        .id(1L)
        .name("Alice")
        .email("alice@example.com")
        .build();


@Builder를 사용하면 순서를 신경 쓰지 않고 명확하게 필드 값을 설정할 수 있다. 그렇기 때문에 가독성이 좋아지고, 필요한 값만 선택해서 넣을 수 있다. 또한 필드가 추가되거나 변경될 때 유연하게 대응이 가능해 유지보수에 용이하다.

 


 

 

@Builder와 생성자(@AllArgsConstructor) 함께 사용

엔티티

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor  // 기본 생성자
@AllArgsConstructor // 모든 필드를 받는 생성자
@Builder
public class User {
    private Long id;
    private String name;
    private String email;
}



객체 생성하기

@Builder를 사용하면 불필요한 Setter 없이도 값을 설정할 수 있고, 객체의 불변성(immutable)을 유지할 수 있어서 안전하다.

// 1. 빌더 패턴 사용
User user1 = User.builder()
        .id(1L)
        .name("Alice")
        .email("alice@example.com")
        .build();

// 2. @AllArgsConstructor 이용
User user2 = new User(2L, "Bob", "bob@example.com");

// 3. 기본 생성자(@NoArgsConstructor) 이용 후 Setter 사용 (비추천)
User user3 = new User();
user3.setId(3L);   // Setter 사용 시 변경 가능 (immutable 아님)
user3.setName("Charlie");
user3.setEmail("charlie@example.com");

 

 


 

@Builder 추가기능

@Builder.Default
필드에 기본 값을 설정하려면 @Builder.Default를 사용한다.

@Getter
@Builder
public class User {
    @Builder.Default
    private Long id = 0L;  // 기본값 설정
    private String name;
    private String email;
}



@Builder에서 특정 생성자 사용하기
@Builder는 기본적으로 모든 필드를 포함한 생성자(@AllArgsConstructor)를 사용한다. 만약 특정 생성자만 @Builder에서 사용하고 싶다면, @Builder를 생성자 위에 직접 붙이면 된다.

@Getter
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String email;

    @Builder
    public User(String name, String email) {  // id 제외
        this.name = name;
        this.email = email;
    }
}
// id 없이 객체 생성 가능
User user = User.builder()
        .name("Alice")
        .email("alice@example.com")
        .build();




반응형