300===Dev Framework/Spring

Spring에서의 Builder 패턴 완벽 가이드 🏗️

블로글러 2024. 11. 28. 22:05

안녕하세요! 오늘은 Spring 프레임워크에서 자주 사용되는 Builder 패턴에 대해 자세히 알아보겠습니다. 마치 레고 블록을 조립하듯 객체를 유연하게 생성하는 방법을 함께 살펴볼게요!

Builder 패턴이란? 🤔

Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있게 해주는 생성 패턴입니다. 마치 주문서에 원하는 옵션을 하나씩 체크하듯이, 필요한 속성들을 순차적으로 설정할 수 있죠!

public class User {
    private final String name;
    private final int age;
    private final String email;

    private User(UserBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.email = builder.email;
    }

    public static class UserBuilder {
        private String name;
        private int age;
        private String email;

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

        public UserBuilder age(int age) {
            this.age = age;
            return this;
        }

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

        public User build() {
            return new User(this);
        }
    }
}

Lombok의 @Builder 사용하기 ✨

Spring 프로젝트에서는 Lombok의 @Builder 어노테이션을 사용하면 위의 복잡한 코드를 간단하게 처리할 수 있습니다!

@Builder
@Data
public class User {
    private String name;
    private int age;
    private String email;
}

// 사용 예시
User user = User.builder()
    .name("김스프링")
    .age(25)
    .email("spring@example.com")
    .build();

Builder 패턴의 장점 💪

  1. 불변성 보장: 객체가 생성된 후에는 상태를 변경할 수 없어 안전합니다.
  2. 가독성 향상: 어떤 값을 설정하는지 명확하게 볼 수 있습니다.
  3. 유연한 객체 생성: 선택적 매개변수를 자유롭게 설정할 수 있습니다.

실전 활용 예시 🚀

Spring에서 DTO나 엔티티를 만들 때 특히 유용합니다:

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private BigDecimal price;
    private String description;

    // 빌더 패턴으로 객체 생성
    public static Product createProduct() {
        return Product.builder()
            .name("스프링 강의")
            .price(new BigDecimal("99900"))
            .description("스프링 마스터 되기")
            .build();
    }
}

주의사항 ⚠️

  1. @Builder를 사용할 때는 반드시 모든 필드를 초기화하는지 확인하세요.
  2. JPA 엔티티에서는 @NoArgsConstructor가 필요할 수 있습니다.
  3. 중첩 빌더를 사용할 때는 순환 참조에 주의하세요.

이렇게 Builder 패턴을 활용하면 객체 생성 코드가 훨씬 깔끔해지고 유지보수하기 좋아집니다. 특히 Spring에서 복잡한 객체를 다룰 때 매우 유용하죠! 😊

728x90