노트

빌더 패턴

Builder

설계#pattern · 연결된 개념 3개

쉽게 말하면

빌더 패턴은 샌드위치 가게에서 빵, 치즈, 소스를 하나씩 골라 주문하는 방식이에요. 고를 게 많아도 차례대로 하나씩 정하니 헷갈리지 않고, 마지막에 완성품을 받아요.

비유가 깨지는 곳 샌드위치는 재료를 빼먹어도 먹을 수 있지만 객체는 필수 값이 빠지면 안 돼요. 그래서 build()에서 검증하거나 타입으로 단계를 강제하고, 단순한 객체라면 객체 리터럴로 충분해요.

생성자 인자가 많거나 생성 순서가 복잡한 객체를, 필요한 단계를 하나씩 호출해 조립한 뒤 마지막에 완성품을 받는 패턴.

const query = new QueryBuilder()
  .from('orders')
  .where('status', '=', 'paid')
  .orderBy('createdAt', 'desc')
  .limit(20)
  .build()
  • 인자가 열 개쯤 되는 생성자에서 몇 번째가 무엇인지 헷갈리는 문제(점층적 생성자, Telescoping Constructor)를 푼다
  • 선택 항목이 많을 때 필요한 것만 골라 설정할 수 있다
  • 같은 조립 단계로 다른 표현을 만들 수 있다. 단계 순서를 아는 감독(Director) 객체를 따로 두기도 한다
  • 필수 값이 빠지지 않도록 build()에서 검증하거나, 타입으로 단계를 강제한다
  • 단순한 객체에는 과하다. JavaScript·TypeScript에서는 객체 리터럴 하나와 기본값으로 충분한 경우가 많다(매개변수 객체 만들기)

ORM의 쿼리 빌더, HTTP 요청 빌더, 테스트 데이터를 만드는 빌더가 흔한 사용처다. 자바에서는 Lombok의 @Builder가 보일러플레이트를 대신 만들어 준다. 생성 패턴 전체는 생성 패턴.

출처: Builder — Refactoring.Guru

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 팩토리 메서드 패턴

    객체 생성을 생성자 호출 대신 전용 메서드(또는 함수)에 맡기는 패턴. GoF(Gang of Four)의 원래 형태는 상위 클래스가 생성 메서드를 선언하고 하위 클래스가 어떤 제품을 만들지 정하는 구조지만, 실무에서는 "생성을 감싸는 함수" 전반을 넓게 가리키기도 한다.

  • 템플릿 메서드 패턴

    알고리즘의 뼈대(단계의 순서)는 상위 클래스의 메서드에 고정하고, 일부 단계만 하위 클래스가 바꾸게 하는 패턴.

  • 디자인 패턴

    반복해서 나타나는 설계 문제에 대한 검증된 해결 구조와 그 이름. 복사해 쓰는 완성 코드가 아니라 객체들이 협력하는 방식을 설명하는 어휘다. 1994년 이른바 GoF(Gang of Four, 네 명의 저자)의 책 『Design Patterns: Elements of Reusable Object-Oriented Software』가 23개 패턴을 정리하며 널리 퍼졌다.

  • NestJS

    NestJS는 TypeScript를 전제로 모듈·의존성 주입(Dependency Injection, DI)·데코레이터(decorator) 구조를 제공하는 Node.js 서버 프레임워크다. 2017년 Kamil Myśliwiec가 만들었고, 구조를 강제하는 방식 때문에 흔히 "Node.js의 Spring"이라 불린다.

  • 퍼사드 패턴

    복잡한 하위 시스템 앞에 단순한 창구 하나를 세워, 호출자가 내부의 여러 객체와 호출 순서를 몰라도 되게 하는 패턴.

보기 옵션