안녕하세요! 오늘은 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 패턴의 장점 💪
- 불변성 보장: 객체가 생성된 후에는 상태를 변경할 수 없어 안전합니다.
- 가독성 향상: 어떤 값을 설정하는지 명확하게 볼 수 있습니다.
- 유연한 객체 생성: 선택적 매개변수를 자유롭게 설정할 수 있습니다.
실전 활용 예시 🚀
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();
}
}
주의사항 ⚠️
@Builder
를 사용할 때는 반드시 모든 필드를 초기화하는지 확인하세요.- JPA 엔티티에서는
@NoArgsConstructor
가 필요할 수 있습니다. - 중첩 빌더를 사용할 때는 순환 참조에 주의하세요.
이렇게 Builder 패턴을 활용하면 객체 생성 코드가 훨씬 깔끔해지고 유지보수하기 좋아집니다. 특히 Spring에서 복잡한 객체를 다룰 때 매우 유용하죠! 😊
728x90
'300===Dev Framework > Spring' 카테고리의 다른 글
@Autowired 어노테이션 완벽 가이드 🚀 (0) | 2024.12.06 |
---|---|
Spring @Options와 FlushCache 정책 😋 (1) | 2024.11.21 |
Spring Controller HTTP 메소드 어노테이션 완벽 가이드 🎯 (0) | 2024.11.14 |
Spring Controller 완벽 가이드 🎯 (3) | 2024.11.14 |
Spring Data JDBC: JPA보다 가벼운 ORM의 대안 🚀 (1) | 2024.11.14 |