/////
Search
Duplicate
🔔

Builder Pattern

복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다.
생성자에 들어갈 매개 변수를 메소드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식이다.

점층적 생성자 패턴

초기 생성 패턴으로 필수 매개변수와 함께 선택 매개변수를 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
복사