Builder 패턴은 객체 생성과 표현을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 생성할 수 있는 디자인 패턴입니다. 주로 복잡한 객체를 생성할 때 사용됩니다.
public class User {
private final String firstName; // 필수
private final String lastName; // 필수
private final int age; // 선택적
private final String phone; // 선택적
private final String address; // 선택적
private User(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.phone = builder.phone;
this.address = builder.address;
}
public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;
private String phone;
private String address;
public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder phone(String phone) {
this.phone = phone;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public User build() {
return new User(this);
}
}
// getters 생략...
}
// 사용 방법
User user = new User.UserBuilder("John", "Doe")
.age(30)
.phone("1234567890")
.address("123 Elm Street")
.build();
Lombok은 Java 코드의 반복적인 부분 (getter, setter, 생성자 등)을 어노테이션을 통해 자동으로 생성해주는 라이브러리입니다. @Builder
는 Lombok에서 제공하는 어노테이션 중 하나로, Builder 패턴을 자동으로 구현해줍니다.
@Builder
어노테이션이 클래스, 생성자, 또는 메서드에 추가되면, Lombok은 해당 요소의 매개변수를 기반으로 Builder 클래스를 생성합니다.build()
메서드가 포함됩니다.import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class User {
private final String firstName;
private final String lastName;
private final int age;
private final String phone;
private final String address;
}
// 사용 방법 (Lombok을 사용하여 간결하게 표현)
User user = User.builder()
.firstName("John")
.lastName("Doe")
.age(30)
.phone("1234567890")
.address("123 Elm Street")
.build();
+------------+ +--------------+
| Client |---->| Builder |
+------------+ +--------------+
^
|
+-----------------------------+
| |
+--------------+ +--------------+
| Concrete | | Concrete |
| Builder1 | | Builder2 |
+--------------+ +--------------+
네, 정확합니다. Lombok의 @Builder
어노테이션은 빌더 패턴과 직접적으로 연관되어 있습니다.
@Builder
는 자동으로 빌더 패턴의 코드를 생성해주는 Lombok의 어노테이션입니다. 이 어노테이션을 사용하면 개발자가 수동으로 빌더 패턴 관련 코드를 작성할 필요가 없어져서, 코드의 중복을 줄이고 가독성을 향상시킬 수 있습니다.
결론적으로, @Builder
는 빌더 패턴을 쉽게 구현하기 위한 도구로 볼 수 있습니다. 개발자는 @Builder
를 사용하여 빌더 패턴의 장점을 누릴 수 있으면서도, 복잡한 코드 작성을 피할 수 있습니다.