- [디자인 패턴] 7. 빌더 패턴2024년 09월 26일
- Song hyun
- 작성자
- 2024.09.26.:29
728x90반응형[디자인 패턴] 7. 빌더 패턴
1. 빌더 패턴이란?
-빌더 패턴은 복잡한 객체를 단계적으로 생성할 수 있도록 도와주는 디자인 패턴이다.
-특히 많은 옵션이나 매개변수를 가진 객체를 만들 때 유용하다.
-일반적인 생성자는 매개변수가 많아지면 복잡해지기 때문에, 빌저 패턴은 각 단계에서 선택적인 매개변수를 추가할 수 있게 해준다.
2. 햄버거와 빌더 패턴
-햄버거를 주문할 때, 특정 업체에서는 다양한 재료 중에서 자신만의 햄버거를 만들 수 있다.
-필수적인 패티, 빵을 고른 뒤 선택적인 토핑들을 고를 수 있다.
=> 빌더 패턴의 구조와 비슷하다.
(1) 필수 요소: 반드시 있어야 하는 필수 요소는 생성자를 통해 전달받는다.
(2) 선택 요소: 필수적이지는 않지만, 고객이 원할 경우 추가할 수 있는 요소들을 선택 요소라고 한다. 이는 메서드로 추가한다.
3. 시나리오 코드 : 햄버거 예제
package builder; // 햄버거 클래스 : 빌더 패턴을 사용해 단계적으로 객체를 생성 public class Burger { // 필수 요소와 선택적 요소가 있을 수 있다. private String bread; private String patty; private boolean cheese; private boolean tomato; private boolean lettuce; // 외부에서 직접 생성하지 못하도록 private 생성자 선언 // 내부 정적 클래스에서 생성된 상태값들을 받아 멤버 변수를 초기화한다. private Burger(BurgerBuilder builder){ this.bread = builder.bread; this.patty = builder.patty; this.cheese = builder.cheese; this.tomato = builder.tomato; this.lettuce = builder.lettuce; } // 반드시 정적 내부 클래스를 선언한다. public static class BurgerBuilder{ private String bread; private String patty; private boolean cheese=false; private boolean tomato=false; private boolean lettuce=false; // 필수 매개변수를 받을 생성자를 설계한다. public BurgerBuilder(String bread, String patty){ this.bread = bread; this.patty = patty; } // 선택적 요소를 단계적으로 추가할 수 있게 메서드를 설계해준다. public BurgerBuilder addCheese(){ this.cheese = true; return this; // 메서드 체이닝 지원 } public BurgerBuilder addTomato(){ this.tomato = true; return this; // 메서드 체이닝 지원 } public BurgerBuilder addLettuce(){ this.lettuce = true; return this; // 메서드 체이닝 지원 } // 핵심 1 - 최종적으로 Burger 객체를 반환하는 메서드를 생성(만들어준다) public Burger build(){ return new Burger(this); } } // end of inner class @Override public String toString() { return "Burger [bread=" + bread + ", patty=" + patty + ", cheese=" + cheese + ", tomato=" + tomato + ", lettuce=" + lettuce + "]"; } }
package builder; public class BurgerStore { public static void main(String[] args) { Burger burger1 = new Burger.BurgerBuilder("브리오슈번", "쿼터파운드") .addCheese() .addTomato() .build(); System.out.println(burger1); System.out.println("-----------------"); Burger 치즈와양상추버거 = new Burger.BurgerBuilder("통밀빵", "닭가슴살") .addCheese() .addLettuce() .build(); System.out.println(치즈와양상추버거); System.out.println("-----------------"); } }
728x90반응형'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 8. 팩토리 패턴 (1) 2024.09.26 [디자인 패턴] 7. 빌더 패턴 예제: 마라탕 주문하기 (0) 2024.09.26 [디자인 패턴] 6. 싱글톤 패턴 복습하기 (1) 2024.09.25 [디자인 패턴] 5. 콜백 메서드 (0) 2024.09.25 [디자인 패턴] 4. 디자인 패턴이란? (0) 2024.09.25 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)