정의
- 객체의 생성과 표현을 분리해서 다양한 구성의 인스턴스를 만드는 생성패턴.(ex : 수제 햄버거)
배경
- 점증적 생성자 패턴
- 생성자를 오버로딩하는 방식.
- 필드가 많아질 수록 인자숫자가 늘어나서 필드가 헷갈릴 여지 존재
- 많아질수록 가독성, 유지보수 안좋음.
class Hamburger { // 필수 매개변수 private int bun; private int patty; // 선택 매개변수 private int cheese; private int lettuce; private int tomato; private int bacon; public Hamburger(int bun, int patty, int cheese, int lettuce, int tomato, int bacon) { this.bun = bun; this.patty = patty; this.cheese = cheese; this.lettuce = lettuce; this.tomato = tomato; this.bacon = bacon; } } public static void main(String[] args) { // 모든 재료가 있는 햄버거 Hamburger hamburger1 = new Hamburger(2, 1, 2, 4, 6, 8); } 출처: https://inpa.tistory.com/entry/GOF-💠-빌더Builder-패턴-끝판왕-정리 [Inpa Dev 👨💻:티스토리]
- 숫자만 봐서는 인자가 뭘 의미하는지 알기도 어렵고, 선택값이면 0으로 들어갈텐데 일일히 넣어줘야 하는 것도 문제.
- 자바빈 배턴
- 생성자로 생성하고 setter로 초깃값 세팅하는 방식.
- 뭔필드인지는 알수 있어서 가독성과 유연성은 생겼지만, 객체 생성시에 모든 값을 주입하지는 않아서 일관성과 불변성 문제 생김
- 일관성 : 필수적으로 초기화되어야 하는 값은 객체 초기화시 반드시 설정되어야 하는데, 개발자 실수로 누락될 가능성이 있어서 일관되지 못하다.
- 불변성 : Setter메서드가 객체 생성 이후에도 호출될 수 있어서 불변성 보장이 안된다.
- Builder 패턴
- 생성자 오버로딩 필요없음.
- 데이터 순서 상관없이 객체를 만들어서 순서나 잘못된 값을 넣는 실수도 없음.
방식
- 별도의 Builder 클래스를 생성해서 메서드체이닝형태로 호출. 최종적으로 build 메서드 호출로 인스턴스를 생성하는 방식.
public static void main(String[] args) {
// 생성자 방식
Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0);
// 빌더 방식
Hamburger hamburger = new Hamburger.Builder(10)
.bun(2)
.patty(3)
.lettuce(3)
.build();
}
출처: https://inpa.tistory.com/entry/GOF-💠-빌더Builder-패턴-끝판왕-정리 [Inpa Dev 👨💻:티스토리]
장점
단점
사용처
- 클래스의 선택적 매개변수가 많은 상황일때 유용하다.
구성
💠 빌더(Builder) 패턴 - 완벽 마스터하기
Builder Pattern 빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아
inpa.tistory.com
'디자인패턴' 카테고리의 다른 글
구조-Adapter 패턴 (0) | 2024.08.03 |
---|