•
복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다.
•
생성자에 들어갈 매개 변수를 메소드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식이다.
점층적 생성자 패턴
•
초기 생성 패턴으로 필수 매개변수와 함께 선택 매개변수를 0, 1, 2개 받는 형태로 다양한 매개변수를 입력받아 인스턴스를 생성하고 싶을 때, 사용하던 생성자를 오버로딩하는 방식이다.
◦
이 경우 클래스에 속성이 너무 많으면, 생성자에 들어갈 인수들이 너무 많아져 순서를 헷갈리게 되는 경우가 생긴다.
◦
매개변수 특성상 순서를 따라야 하므로 생성자만으로는 필드를 선택적으로 생략할 수 없어 의미없는 파라미터를 전달해야할 수도 있다.
◦
속성이 늘어나는 경우, 선택 매개변수를 제공하기 위해 메소드가 기하급수적으로 늘어나 가독성이나 유지보수 측면에서 좋지 않다.
자바 빈 패턴
•
단점들을 보완하기 위해 매개변수가 없는 생성자로 객체를 생성한 후 setter로 클래스 필드의 초깃값을 설정하는 방식이다.
•
이를 통해 가독성 문제점을 개선하고 선택 매개변수의 setter를 호출함으로써 유연적인 객체 생성이 가능해졌따.
•
다만 이는 객체 생성 시점에 모든 값을 주입하지 않아 일관성, 불변성 문제가 발생한다.
빌더 패턴
•
빌더 패턴은 이러한 문제를 해결하기 위해 별도의 Builder 클래스를 만들어 메소드를 통해 순서대로 값을 입력받은 후, 최종적으로 build() 메소드를 이용해 하나의 인스턴스를 생성하여 리턴하는 패턴이다.
•
빌더 패턴을 이용하면 데이터 순서에 상관없이 객체를 만들어내 생성자 인자 순서를 파악할 필요도 없고 잘못된 값을 넣는 실수도 하지 않게 된다.
•
다음과 같은 클래스가 있다고 하자.
class Student {
private int id;
private String name;
private String grade;
private String phoneNumber;
}
Java
복사
•
그럼 위 클래스의 빌더는 다음과 같다.
class StudentBuilder {
private int id;
private String name;
private String grade;
private String phoneNumber;
public StudentBuilder id(int id) {
this.id = id;
return this;
}
public StudentBuilder name(String name) {
this.name = name;
return this;
}
public StudentBuilder grade(String grade) {
this.grade = grade;
return this;
}
public StudentBuilder phoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
}
Java
복사