디자인 패턴 총정리 시리즈의 네 번째 패턴은 Builder Pattern입니다.
1. 개요
Builder Pattern은 객체의 생성과 표현을 분리하는 creation 설계 패턴입니다. 동일한 creation 설계 프로세스를 사용해서 객체에 다양한 변화를 만들어 줄 수 있습니다. 해당 패턴은 여러 선택/필수 파라미터를 포함한 복잡한 초기화 절차를 가진 객체를 처리할 때 유용하게 사용될 수 있습니다.
2. 예시 - Car Factory
생상, 시트, 엔진 타입, GPS 유무 등 다양한 옵션 파라미터를 선택해 차량 객체를 생성해야 하는 예시를 들어보겠습니다.
다수의 파라미터를 가지거나 다수의 오버로딩을 하고 있는 생성자를 가지는 대신, Builder 패턴을 사용해서 객체 생성 프로세스를 간소화할 수 있습니다.
우선 Car 클래스를 정의합니다. 해당 클래스는 우리가 생성하기 원하는 객체를 대표해줍니다.
class Car {
public:
void setColor(const std::string& color) { /* Set the car's color */ }
void setSeats(int seats) { /* Set the number of seats */ }
void setEngineType(const std::string& engineType) { /* Set the engine type */ }
void setGPS(bool hasGPS) { /* Set GPS availability */ }
// Additional methods and functionality of the Car class
// ...
};
그다음 Car 객체 생성에 대한 책임이 분리된 CarBuilder 클래스를 생성합니다.
class CarBuilder {
private:
Car car;
public:
void setColor(const std::string& color) {
car.setColor(color);
}
void setSeats(int seats) {
car.setSeats(seats);
}
void setEngineType(const std::string& engineType) {
car.setEngineType(engineType);
}
void setGPS(bool hasGPS) {
car.setGPS(hasGPS);
}
Car build() {
return car;
}
};
CarBuilder 클래스는 단계적인 생성 절차를 캡슐화합니다. 해당 클래스는 색상, 시트, 엔진유형, GPS 등 Car 객체의 개별 속성을 설정하는 메서드를 제공하고, build() 메서드는 완전히 설정된 car 객체를 반환합니다.
이와 같이 Builder 패턴을 사용하면, 다양한 설정으로 car 객체를 구성할 수 있습니다.
Car buildCar() {
CarBuilder builder;
builder.setColor("Red");
builder.setSeats(4);
builder.setEngineType("V8");
builder.setGPS(true);
return builder.build();
}
Car myCar = buildCar();
이처럼 Builder 패턴을 이용하면 다수의 생성자나 생성자 오버로딩을 사용하여 구성을 복잡하게 하지 않고 원하는 객체를 쉽게 구성할 수 있습니다.
3. 장점
Improved Readability: Builder 패턴은 복잡한 구성의 객체를 구축하기 위한 보다 자연스럽고 가독성 있는 API를 제공하여 코드를 보다 읽기 쉽게 만들고 유지 보수성을 높여줍니다.
Flexible Object: Builder 패턴을 사용하면 다른 속성을 선택하고 설정하는 것과 같은 객체 변형을 쉽게 생성할 수 있어 유연성이 향상됩니다.
Encapsulated Construction Logic: 생성 로직이 Builder 클래스 내로 캡슐화되어 객체 생성 프로세스를 추상화하고 모듈화를 높일 수 있습니다.
4. 단점
Increased Code Complexity: Builder 패턴을 구현하기 위해선 추가적인 Builder 패턴을 만들어야 하기 때문에 코드 복잡도가 올라갈 수 있습니다.
Overhead: Builder 패턴에서는 추가적인 추상 레이어가 도입되어 오버헤드가 약간 발생할 수 있지만, 무시 가능한 수준입니다.
5. 결론
Builder Pattern은 복잡한 객체의 생성을 유연하고 가독성 있는 방법으로 간소화할 수 있는 도구입니다. Builder Pattern은 객체 생성 로직을 객체 자체로부터 분리함으로써 코드 구성, 유지보수성, 재사용성을 향상합니다.
'Study > Software Architecture' 카테고리의 다른 글
[디자인패턴] 구조패턴(1) - Adapter Pattern (어댑터 패턴) (0) | 2023.05.22 |
---|---|
[디자인패턴] 생성패턴(5) - Prototype Pattern (프로토타입 패턴) (0) | 2023.05.19 |
[디자인패턴] 생성패턴(3) - Abstract Factory Pattern (추상 팩토리 패턴) (0) | 2023.05.18 |
[디자인패턴] 생성패턴(2) - Factory Method Pattern (팩토리 메소드 패턴) (1) | 2023.05.16 |
[디자인패턴] 생성패턴(1) - Singleton Pattern (싱클턴 패턴) (0) | 2023.05.14 |