[디자인 패턴] 빌더 패턴

2026.07.15. 23:03

빌더(builder) 패턴

  • 개체의 생성과정을 그 개체의 클래스로부터 분리하는 방법

  • 개체의 부분부분을 만들어 나가다 준비되면 그제서야 개체를 생성

    • 벽돌을 하나씩 쌓아 담장을 만드는 과정


자바의 StringBuilder -> 가장 대표적인 빌더 패턴

  • 문자열을 합쳐야할 때 자바의 String 클래스는 불편함.

StringBuilder builder = new StringBuilder(4096);
builder.append(" * ");
builder.append(kv.key);
builder.append(" : ");
builder.append(kv.value); 

builder.toString();

StringBuilder가 알아서 문자열을 합쳐줌.

플루턴트 인터페이스(fluent interface)

  • 요즘은 빌더 패턴을 구현 시 종종 플루언트 인터페이스로 처리.

StringBuilder builder = new StringBuilder(4096);
builder.append(" * ")
       .append(kv.key)
       .append(" : ")
       .append(kv.value); 

builder.toString();

구현 -> append() 후 자기 자신(this) 객체를 리턴.

빌더 패턴의 잘못된 패턴 - 생성자에서의 Builder 패턴

롬복에서의 builder.

Employee robert = new EmployeeBuilder(1)
              .withAge(31)
              .withStartYear(2000)
              .withName("Robert", "Lee")
              .build();

-->  TODO 직접 구현해볼 것.

문제는 해당 코드에서 특정 함수를 호출하지 않은 경우 개체 생성 시 유효하지 않은 경우가 있을 수 있음.

Employee robert = new EmployeeBuilder(1)
              .withAge(31)
              .withName("Robert", "Lee")
              .build(); // StartYear 누락

해결방법 

  • 매개변수 클래스를 이용한 개체 생성 

  • C#의 경우 매개변수에 인자를 명명해서 개체를 생성할 수 있음.

빌더 패턴의 다형적 확장

CSV 파일을 읽어 html로 변경해주는 빌더

CSV 파일을 읽어 마크다운으로 변경해주는 빌더