[디자인 패턴] 빌더 패턴
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 파일을 읽어 마크다운으로 변경해주는 빌더