Java 개발에서 Builder 패턴은 객체 생성 시 코드 가독성을 높이고 복잡성을 줄이는 데 매우 유용한 패턴입니다. 특히 필드가 많거나 선택적인 필드가 있을 때 유용합니다. Lombok의 @Builder 애너테이션을 사용하면 Java의 Builder 패턴을 훨씬 간편하게 구현할 수 있습니다. 이 글에서는 Lombok의 @Builder를 사용하여 Builder 패턴을 어떻게 간단하게 적용할 수 있는지, @Builder.Default로 기본 값을 설정하는 방법, 그리고 실무에서의 활용 예제를 소개합니다.
@Builder로 빌더 패턴 간편하게 구현하기
기존 Java에서 Builder 패턴을 구현하려면 많은 코드가 필요하지만, Lombok의 @Builder 애너테이션을 사용하면 클래스에 Builder 패턴을 간단히 적용할 수 있습니다. 객체를 생성할 때 필드를 유연하게 설정할 수 있기 때문에 코드의 가독성과 유지보수성이 크게 향상됩니다.
예제 코드
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private String name;
private int age;
private String email;
}
public class Main {
public static void main(String[] args) {
User user = User.builder()
.name("Alice")
.age(25)
.email("alice@example.com")
.build();
System.out.println(user);
}
}
위 코드에서는 User.builder()를 사용해 name, age, email 필드를 초기화할 수 있으며, 원하는 필드만 선택하여 설정할 수 있습니다. Builder 패턴은 생성자나 setter 메서드를 여러 번 호출할 필요가 없어 코드의 가독성과 유연성을 높입니다.
@Builder.Default와 예외 처리
@Builder.Default 애너테이션을 사용하면 특정 필드에 대해 기본 값을 설정할 수 있습니다. 이 애너테이션은 값을 명시적으로 설정하지 않았을 때 사용할 기본값을 지정합니다. 예를 들어, 특정 필드의 값이 null일 때 기본 값을 제공하여 예외 상황을 방지할 수 있습니다.
예제 코드
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Product {
private String name;
@Builder.Default
private double price = 0.0;
@Builder.Default
private int stock = 10;
}
public class Main {
public static void main(String[] args) {
Product product1 = Product.builder()
.name("Laptop")
.build();
Product product2 = Product.builder()
.name("Smartphone")
.price(499.99)
.stock(50)
.build();
System.out.println(product1);
System.out.println(product2);
}
}
이 예제에서 product1의 price와 stock은 각각 0.0과 10이라는 기본 값으로 설정됩니다. product2는 price와 stock을 지정했기 때문에 기본 값을 무시하고 입력된 값으로 초기화됩니다. @Builder.Default는 선택적인 값에 대해 기본 값을 설정하여 불필요한 null 체크나 예외 처리를 줄여주므로 코드의 안정성과 가독성을 높여줍니다.
실무에서의 Builder 활용 예제
실무에서는 Builder 패턴을 이용하여 복잡한 DTO(Data Transfer Object)나 엔터티 객체를 생성할 때 유용하게 사용할 수 있습니다. 특히, 필드가 많은 객체나 선택적인 필드가 많은 클래스의 경우 Lombok의 Builder 패턴을 적용하면 코드가 깔끔해지고 유지보수가 쉬워집니다. 예를 들어, 여러 옵션을 가진 상품 엔터티를 Builder 패턴으로 생성해보겠습니다.
예제 코드
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class Order {
private String productName;
private int quantity;
private double price;
private String shippingAddress;
@Builder.Default
private String status = "Pending"; // 기본 상태는 'Pending'
}
public class Main {
public static void main(String[] args) {
Order order = Order.builder()
.productName("Wireless Earbuds")
.quantity(2)
.price(79.99)
.shippingAddress("123 Main St, Anytown")
.build();
System.out.println(order);
}
}
이 예제에서 Order 객체는 Builder 패턴을 통해 각 필드를 선택적으로 설정할 수 있습니다. 또한, status 필드는 기본적으로 "Pending" 상태로 설정되므로 명시적으로 값을 지정하지 않아도 기본 상태를 갖습니다. 실무에서 Order와 같은 객체의 모든 필드를 생성자에서 초기화하려면 코드가 복잡해지지만, Builder 패턴을 사용하면 필드 추가나 변경에 유연하게 대처할 수 있어 유지보수에 용이합니다.
참고사이트
- Lombok 공식 사이트: https://projectlombok.org
- Baeldung의 Lombok Builder 가이드: https://www.baeldung.com/lombok-builder
'JAVA' 카테고리의 다른 글
[JAVA] Lombok 로깅 처리 (@Slf4j, @Log 등) (0) | 2024.10.31 |
---|---|
[JAVA] Lombok 애너테이션, 어노테이션 (@Value, @Singular, @SuperBuilder) (0) | 2024.10.31 |
[JAVA] Lombok Lazy Getter(lazy=true)와 Setter (0) | 2024.10.31 |
[JAVA] Lombok @Data 애너테이션(어노테이션 Annotation) (1) | 2024.10.30 |
[JAVA] Lombok 어노테이션, 애너테이션(Annotation)의 기본 사용법 (0) | 2024.10.30 |
[JAVA] Lombok 환경 설정 (1) | 2024.10.30 |
[JAVA] Lombok 이란? (0) | 2024.10.30 |
[JAVA] JSoup 활용 (자주사용하는 메서드) (0) | 2024.10.29 |