public 생성자나 정적 메소드 패턴을 사용하여 객체를 생성한다 하더라도, 매개변수가 많아지면서 정적 메서드 패턴을 사용하는 것은 가독성이 떨어지고 복잡해진다. 자바 빈즈 패턴을 이용하여 가독성을 올릴 수 있으나, 객체가 일시적으로 불완전한 상태를 지니게 된다. 빌더 패턴을 사용하면 이러한 문제들을 해결하고 각각의 장점을 살릴 수 있다. 또한, 계층적으로 설계된 클래스에서도 상속한 클래스와 해당 빌더를 상속하여 추가적으로 구현하면서 사용하기에 용이하다.
적은 매개변수를 가지는 경우, 빌더를 만들어야 하는 수고로움이 오히려 비용을 증가시킬 수 있으나, API 등을 만들어 운영하다보면 매개변수가 계속해서 증가할 확률이 높다. 장기적으로 보았을 때 빌더 패턴을 사용하는 것이 좋은 점이 더 많다.
import java.util.ArrayList;
import java.util.List;
public class Human {
private final long id;
private final String name;
private List<String> friends;
private int age;
private int height;
public static class Builder{
private final long id;
private final String name;
private List<String> friends = new ArrayList<>();
private int age = 0;
private int height = 0;
public Builder(long id, String name) {
this.id = id;
this.name = name;
}
public Builder addFriend(String friend){
friends.add(friend);
return this;
}
public Builder setAge(int age){
this.age = age;
return this;
}
public Builder setHeight(int height){
this.height = height;
return this;
}
public Human build(){
return new Human(this);
}
}
public Human(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.age = builder.age;
this.height = builder.height;
this.friends = builder.friends;
}
@Override
public String toString() {
return "Human{" +
"id=" + id +
", name='" + name + '\'' +
", friends=" + friends +
", age=" + age +
", height=" + height +
'}';
}
// 빌더 패턴을 이용하여 생성하는 모습이다.
public static void main(String[] args) {
Human human = new Builder(1, "이름")
.setAge(20)
.setHeight(180)
.addFriend("철수")
.addFriend("짱구")
.build();
System.out.println(human);
}
}
'자바' 카테고리의 다른 글
자바 - 의존성 주입 (0) | 2024.11.26 |
---|---|
자바 - 싱글턴 패턴 (0) | 2024.11.25 |
자바 - 정적 메소드 생성 (0) | 2024.11.25 |
자바 - 정규화 표현 문법 (0) | 2024.11.24 |
자바 JVM - 힙 영역과 GC (0) | 2024.11.23 |
댓글