1. 빌더 패턴이란?
복잡한 객체의 생성과 표현을 분리하여 동일한 구성 요소로 다양한 표현을 생성할 수 있도록 설계 패턴입니다.
예를 들어 외식 시스템에서 메뉴 구성은 고정된 재료(건강식, 일반식 등)가 다르지만, 기본적인 조리 과정은 유사합니다.
2. 주요 목적
복잡한 객체의 구현 세부사항을 숨기고, 서브클래스를 통해 동적으로 객체를 생성하는 방식으로 복잡도를 관리합니다.
3. 구현 방법
1) 건물 클래스 정의
public class Building {
private String steel;
private String concrete;
public String getSteel() { return steel; }
public void setSteel(String steel) { this.steel = steel; }
public String getConcrete() { return concrete; }
public void setConcrete(String concrete) { this.concrete = concrete; }
@Override
public String toString() {
return "Building{steel='" + steel + "', concrete='" + concrete + "'}";
}
}
2) 빌더 인터페이스 정의
public interface Builder {
void installSteel();
void installConcrete();
Building getBuilding();
}
3) 고층 건설 팀 구현
public class HighRiseTeam implements Builder {
private Building building = new Building();
@Override
public void installSteel() {
building.setSteel("고층용 철근");
}
@Override
public void installConcrete() {
building.setConcrete("고층용 콘크리트");
}
@Override
public Building getBuilding() {
return building;
}
}
4) 건설 지휘자 클래스
public class Director {
public Building construct(Builder builder) {
builder.installSteel();
builder.installConcrete();
return builder.getBuilding();
}
}
5) 실행 클래스
public class MainTest {
public static void main(String[] args) {
Director director = new Director();
Building highBuilding = director.construct(new HighRiseTeam());
System.out.println(highBuilding);
// 추가 구현 예시: 저층 건설 팀
// Building lowBuilding = director.construct(new LowRiseTeam());
// System.out.println(lowBuilding);
}
}
4. 장단점 분석
장점
- 구축자 간 독립성 확보 (다양한 건설 팀 별도 구현 가능)
- 새로운 제품 유형 추가 시 기존 구조에 영향 없음
단점
- 내부 구조가 급격히 변할 경우 많은 빌더 클래스 필요
- 동일한 제품군 내에서 차이가 작을 때는 비효율적