1. Builder 패턴
Builder 패턴은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴입니다.
1.1 수동 구현 예시
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);
}
}
public static UserBuilder builder() {
return new UserBuilder();
}
}
1.2 사용 예시
User user = User.builder()
.name("John")
.age(30)
.email("john@example.com")
.build();
1.3 장점
- 가독성: 객체 생성 코드가 어떤 필드에 어떤 값을 설정하는지 명확히 볼 수 있습니다.
- 유연성: 선택적 매개변수가 많은 경우에 유용합니다. 필요한 필드만 설정할 수 있습니다.
- 불변성: 객체를 불변으로 만들 수 있습니다.
- 유효성 검사: build() 메서드에서 객체 생성 전에 유효성 검사를 수행할 수 있습니다.
2. @Builder 어노테이션 (Lombok)
@Builder는 Lombok 라이브러리에서 제공하는 어노테이션으로, 빌더 패턴을 자동으로 구현해줍니다.
2.1 사용법
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
private String email;
}
2.2 사용 예시
User user = User.builder()
.name("John")
.age(30)
.email("john@example.com")
.build();
2.3 주요 특징
- 모든 필드에 대한 빌더 메서드를 자동 생성
- 클래스 레벨에 적용하면 모든 필드를 포함하는 빌더를 생성
- 생성자에 적용하면 해당 생성자의 매개변수만을 위한 빌더를 생성
3. 주의사항
- 클래스에 필드가 많은 경우 빌더 클래스도 커질 수 있습니다.
- Lombok의 @Builder를 사용할 경우, IDE에 Lombok 플러그인을 설치해야 코드 어시스트 등이 정상 작동합니다.
4. 결론
Builder 패턴은 특히 많은 필드를 가진 복잡한 객체를 생성할 때 유용하며, 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다. Lombok의 @Builder 어노테이션을 사용하면 보일러플레이트 코드를 줄이고 빠르게 Builder 패턴을 구현할 수 있습니다.
'Java' 카테고리의 다른 글
구독 시스템 - 결제 주기와 구독 서비스 로직 (1) | 2024.11.22 |
---|---|
구독 시스템 - 구독 상태 및 Entity 설계 (1) | 2024.11.20 |
람다 표현식 (0) | 2024.07.16 |
메서드 체이닝 (0) | 2023.10.25 |