minstudio

빌더 패턴 (Builder)

빌더 패턴(Builder Pattern)은 객체를 생성할 때 생성자에 수많은 인자를 순서대로 넘겨야 하는 번거로움과 실수(가독성 저하)를 막기 위해 고안되었습니다.

햄버거를 주문할 때 "빵, 패티, 치즈, 양상추, 토마토" 순서를 외워서 생성자를 부르는 대신, .addPatty().addCheese() 처럼 메서드 체이닝(Chaining)을 통해 직관적으로 옵션을 조립한 뒤 마지막에 build()를 호출하여 최종 객체를 완성합니다.

🍔 Builder: 메서드 체이닝을 통한 직관적 조립 ❌ 기존 점층적 생성자 방식 new Burger( "Sesame", // 빵 종류 true, // 패티 여부 false, // 치즈 여부 true // 양상추 여부 ); 순서를 외워야 하고, true/false가 뭔지 알기 힘듦 ✅ 빌더 패턴 (Builder) new Burger.Builder("Sesame") .addPatty() .addLettuce() .build(); 치즈를 빼고 싶으면 메서드 호출만 생략하면 됨!
class Hamburger {
    private String bun;
    private String patty;
    private boolean hasCheese;
    
    // private 생성자
    private Hamburger(Builder builder) {
        this.bun = builder.bun;
        this.patty = builder.patty;
        this.hasCheese = builder.hasCheese;
    }
    
    public void showMenu() {
        System.out.println(bun + " 번, " + patty + " 패티, 치즈: " + hasCheese);
    }

    public static class Builder {
        private String bun = "참깨"; // 기본값
        private String patty;
        private boolean hasCheese = false;
        
        public Builder(String patty) {
            this.patty = patty; // 필수 항목
        }
        
        public Builder bun(String bun) {
            this.bun = bun;
            return this;
        }
        
        public Builder addCheese() {
            this.hasCheese = true;
            return this;
        }
        
        public Hamburger build() {
            return new Hamburger(this);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Hamburger burger = new Hamburger.Builder("소고기")
                                        .bun("브리오슈")
                                        .addCheese()
                                        .build();
        burger.showMenu();
    }
}
빌더 패턴 (Builder) | Minstudio