본문 바로가기
카테고리 없음

[SpringBoot] Builder Pattern (빌더 패턴)

by Dev.후크리 2026. 5. 1.

우리는 데이터를  한번에 담아서 보낼 때 정해진 클래스의 객체를 생성해 객체 내부에 담게 된다.

객체를 한 번에 생성하지 않고, 값을 단계적으로 담아 마지막에 build()로 객체를 만드는 패턴이 바로 빌더 패턴이다.

 

@Builder
public class User {
    private String email;
    private String role;
}

 

위 코드를 작성하게 되면 실제론 아래와 같이 코드가 작동한다.

 

public class User {
    private String email;
    private String role;

    User(String email, String role){
        this.email = email;
        this.role = role;
    }

    public static UserBuilder builder() {
        return new UserBuilder();
    }

    public static class UserBuilder {
        private String email;
        private String role;

        public UserBuilder email(String email){
            this.email = email;
            return this;
        }

        public UserBuilder role(String role){
            this.role = role;
            return this;
        }

        public User build(){
            return new User(email, role);
        }
    }
}

 

이렇게 되면 실제로 서비스 계층에서 사용할 때는 다음과 같다.

 

User user = User.builder()
        .email("a@test.com")
        .role("USER")
        .build();

 


여기서 주의해야 할 점은 빌더 어노테이션이다.

@Builder 위치에 따라 다르기 때문이다.

 

클래스 위:

@Builder
class User
 

→ 모든 필드 기반 builder

 

생성자 위:

@Builder
public User(String email)
 

→ 그 생성자 파라미터만 builder

 

메서드 위:

@Builder
public static User create(...)
 

→ 메서드 호출용 builder