TIL
  • Contents
  • Book
    • 도메인 주도 설계
      • 1. 동작하는 도메인 모델 만들기
    • 오브젝트
      • 데이터 중심 설계
      • 책임 중심 설계
      • 책임 할당을 위한 GRASP 패턴
      • 메시지와 인터페이스
      • 객체 분해
    • Effective Java
      • Item 7 - 다 쓴 객체 참조를 해제하라
      • Item 7 발표 내용
      • Item 13 - clone 재정의는 주의해서 진행하라
      • Item 13 발표 내용
      • Item 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
      • Item 16 발표 내용
      • Item 26 - 로 타입은 사용하지 말라
      • Item 28 - 배열보다는 리스트를 사용하라
      • Item 28 발표 내용
      • Item 29 - 이왕이면 제네릭 타입으로 만들라
      • Item 30 - 이왕이면 제네릭 메서드로 만들라
      • Item 31 - 한정적 와일드 카드를 사용해 API 유연성을 높이라
      • Item 35 - ordinal 메서드 대신 인스턴스 필드를 사용하라
      • Item 37 - ordinal 인덱싱 대신 EnumMap을 사용하라
      • Item 37 발표 내용
      • Item 43 - 람다보다는 메서드 참조를 사용하라
      • Item 43 발표 정리
      • Item 56 - 공개된 API 요소에는 항상 문서화 주석을 작성하라
      • Item 56 발표 정리
      • Item 62 - 다른 타입이 적절하다면 문자열 사용을 피하라
      • Item 62 발표 정리
      • Item 73 - 추상화 수준에 맞는 예외를 던지라
      • Item 83 - 지연 초기화는 신중히 사용하라
      • Item 83 발표 내용
      • Item 89 - 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
      • Item 89 발표 내용
    • 개발자를 위한 SQL 튜닝
      • SQL 쿼리 실습을 위한 DB 서버 구축
      • 인덱스 튜닝
      • 인덱스 스캔 튜닝
      • 인덱스 스캔 튜닝 실습
      • 인덱스 패스트 풀 스캔
      • 테이블 풀 스캔 튜닝
      • 조인 튜닝
      • 중첩 루프 조인 튜닝
      • 중첩 루프 조인 튜닝 실습
      • 해시 조인 튜닝
      • 해시 조인 튜닝 실습
      • 세미 조인 튜닝
      • 세미 조인 튜닝 실습
      • 아우터 조인
      • 함수 튜닝
      • 부분 범위 처리 튜닝
      • 파티셔닝 튜닝
      • 파티션 인덱스 튜닝
      • 병렬 처리 튜닝
  • Java
    • Design Pattern
      • Intro
      • Types of Design Patterns
      • Creational
        • Builder Pattern
        • Singleton Pattern
        • Prototype Pattern
        • Factory Pattern
        • Abstract Factory Pattern
      • Structural
        • Adapter Pattern
        • Bridge Pattern
        • Composite Pattern
        • Decorator Pattern
        • Facade Pattern
        • Flyweight Pattern
        • Proxy Pattern
      • Behavioural
        • Chain of Responsibility Pattern
        • Command Pattern
        • Interpreter Pattern
        • Iterator Pattern
        • Mediator Pattern
        • Memento Pattern
        • Observer Pattern
        • State Pattern
        • Strategy Pattern
        • Template Method Pattern
        • Visitor Pattern
    • Java
      • Cracking the Coding Interview
      • TDD, Clean Code with Java 11기
        • 자동차 레이싱
        • 로또
        • 사다리 타기
        • 볼링 게임 점수판
    • 궁금증
      • 자바 8 버전의 인터페이스와 추상클래스
      • 자바의 제네릭은 어떻게 이전 버전과 호환되는 걸까?
      • 스프링 MVC 기본 구조
      • 마샬링과 직렬화
      • 인터뷰 질문 모음
      • Code Coverage
  • Database
    • Database
      • SQL 레벨업
      • DB 스터디
        • DBMS
          • MySQL
        • INDEX
        • Join(Nested Loop, Hash)
        • Join(Semi, Outer)
        • Partial Range Processing
        • Function
        • Partitioning
        • Parallel Processing
  • Network
  • Architecture
    • Issue
      • Git Push Error
      • SonarLint Warning - assertThatExceptionOfType()
  • Infra
  • Spring
    • Spring JPA
      • 1. 데이터 모델링 및 연관관계 설정
      • 2. 최적화 내용
      • 3. Spring-Data-Jpa
      • 4. Query DSL
    • Spring Security
      • Intro
    • Spring Batch
      • 배치용 디비 설치
      • 배치 데이터 분석하기
      • 배치 프로세스 구상하기 및 성능 차이 확인하기
  • Issue
  • Tistory
    • Tistory Blog
  • Design High Performing Architectures
  • Design Resilient Architectures
  • Design Secure Applications And Architectures
  • Design Cost-Optimized Architectures
Powered by GitBook
On this page
  • Intro
  • Builder Pattern 의 생성 배경
  • 빌터 패턴의 단점
  • Builder 패턴의 구성요소
  • Director를 사용하는 경우에 대한 이야기
  • 또 다른 예시(Java API)
  • 주의사항

Was this helpful?

  1. Java
  2. Design Pattern
  3. Creational

Builder Pattern

Creational Pattern

PreviousCreationalNextSingleton Pattern

Last updated 3 years ago

Was this helpful?

Intro

빌더 패턴은 객체를 만들기 위해 사용된다.

  • 객체는 여러 하위 객체로 구성되거나 복잡한 구성의 프로세스가 필요할 수도 있다. 빌더 패턴을 사용하여 복잡한 생생 작업을 단순화할 수 있다.

  • 빌더 패턴은 복잡한 객체를 빌드하는 과정을 캡슐화하거나, 숨기고 객체의 표현과 구성을 분리한다.

  • 분리를 통해 동일한 구성 프로세스를 사용하여 다른 표현을 구성할 수 있다.

  • Java에서 서로 다른 표현은 동일한 구성 프로세스를 공유할 수 있는 서로 다른 클래스의 객체를 만드는 것을 의미한다.

Builder Pattern 의 생성 배경

  • 클래스를 생성하기 위해 선택적 매개변수가 많을 떄 적절하게 대응하기 어렵다.

  • 이러한

    환경에서 을

    사용해왔다.

  • 점층적 생성자 패턴도 쓸 수는 있지만, 매개변수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다.

  • 그래서 Setter를 통해 값을

    설정하는 패턴을

    통해 사용

    • 객체 하나를 만들기 위해서는 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지 일관성(consistency)이 무너진 상태에 놓이게 된다.

    • 클래스를 불변(immutable) 상태로 만들 수 없다.

  • 은 명명된 선택적 매개변수(named optional parameters)

    를 흉내낸 것이다.

  • 빌더 패턴은 계층적으로 설계된 클래스와 함께 쓰기에 좋다.

  • 매개 변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다.

  • 빌더는 점층적 생성자 보다 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고 자바빈즈보다 훨씬 안전하다.

빌터 패턴의 단점

  • 빌더 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있다.

  • 점층적 생성자 패턴보다는 코드가 장활에서 매개 변수 4개 이상은 되어야 값어치를 한다.

Builder 패턴의 구성요소

결론

  • Builder 클래스는 퍼블릭 인터페이스에 대한 캡슐화가 가능하다.

Director를 사용하는 경우에 대한 이야기

Director 클래스 없이 Builder만을 사용하는 패턴도 찾아볼 수 있다.

클라이언트는 빌더를 직접 인스턴스화하고 필요한 메서드를 호출하여 제품을 자체적으로 가져올 수 있다.

이런 방식은 telescoping constructor pattern에 대한 일시적인 해결책일 뿐이다.

  • 속성이 너무 많지만 일부 속성이 선택적으로 설정되어야하는 클래스를 작성해야하는 경우

  • 빌더를 통해 필수 속성만 설정하고 제품을 작성할 수 있다.

또 다른 예시(Java API)

  • StringBuilder의 경우 append를 통해 연속적인 문자열을 만들 수 있다.

  • HtmlDocumentBuilder, PdfDocumentBuilder, DocumentBuilder의 경우 구체적인 유형을 변경하여 다양한 문서 유형을 빌드할 수 있다.

주의사항

빌더 패턴은 추상 팩토리 패턴의 차이점

  • 빌더 패턴이 단계별로 객체를 생성한다.

  • 추상 팩토리 패턴은 한 번에 객체를 반환한다.

점층적 생성자 패턴(telescoping constructor pattern)
JavaBeans
빌더 패턴
예시 엔티티 구성.png