728x90
목차
빌더(Builder)
빌더(Builder) 디자인 패턴은 복잡한 객체의 생성 과정과 그 표현 방법을 분리해, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있도록 하는 생성 디자인 패턴이다. 이 패턴은 주로 객체의 생성이 복잡하거나, 객체의 구성 요소가 많고, 구성이 단계적으로 이루어져야 할 때 사용한다. 패턴명의 어원은 실제 건축에서의 빌더와 유사하다. 건축에서 건물을 짓는 과정은 매우 복잡하며, 다양한 단계와 부품이 필요하다. 이 과정을 프로그래밍에 적용하여, 복잡한 객체를 단계별로 조립해 나가는 것을 '빌더 패턴'이라고 부른다.
패턴을 미적용한 예시 코드
빌더 패턴을 적용하지 않고 복잡한 객체를 생성하는 경우, 객체의 생성자가 과도하게 복잡해지거나, 필요한 데이터를 모두 생성자에 넘겨줘야 하므로 코드의 유연성과 가독성이 떨어진다.
class Car
{
public string Maker { get; set; }
public string Model { get; set; }
// 다른 속성들...
public Car(string maker, string model)
{
Maker = maker;
Model = model;
// 다른 속성들에 대한 초기화...
}
}
class Program
{
static void Main(string[] args)
{
// 모든 정보를 생성자에 넘겨줘야 한다.
Car car = new Car("Hyundai", "Sonata");
Console.WriteLine($"Car Maker: {car.Maker}, Model: {car.Model}");
}
}
패턴 미적용시 발생하는 문제점:
- 유연성 부족: 객체의 속성이 많아질수록 생성자의 매개변수가 증가하며, 이는 코드 수정을 어렵게 만든다.
- 가독성 저하: 생성자에 많은 매개변수를 넘기는 것은 코드를 읽고 이해하는 데 있어 부담을 준다.
- 유지보수의 어려움: 객체의 속성이 추가되거나 변경될 때마다 생성자와 관련 코드를 모두 수정해야 한다
패턴을 적용한 예시 코드
빌더 패턴을 적용하면 객체의 생성 과정을 단계별로 나누어 처리할 수 있으며, 최종적으로 필요한 객체를 구성할 수 있다. 아래는 C#으로 작성된 빌더 패턴의 예시 코드다.
// 제품 클래스
class Car
{
public string Maker { get; set; }
public string Model { get; set; }
// 다른 속성들...
}
// 빌더 인터페이스
interface ICarBuilder
{
void SetMaker(string maker);
void SetModel(string model);
// 다른 설정 메소드들...
Car Build();
}
// 구체적인 빌더 클래스
class CarBuilder : ICarBuilder
{
private Car _car = new Car();
public void SetMaker(string maker) {_car.Maker = maker;}
public void SetModel(string model) {_car.Model = model;}
public Car Build() {return _car;}
}
// 사용 예
class Program
{
static void Main(string[] args)
{
var builder = new CarBuilder();
builder.SetMake("Hyundai");
builder.SetModel("Sonata");
Car car = builder.Build();
Console.WriteLine($"Car Make: {car.Make}, Model: {car.Model}");
}
}
'컴퓨터 과학 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 생성 패턴(6) : 싱글톤(Singleton) (0) | 2024.03.24 |
---|---|
[디자인패턴] 생성 패턴(5) : 프로토타입(Prototype) (0) | 2024.03.24 |
[디자인패턴] 생성 패턴(3) : 팩토리 메서드(Factory Method) (0) | 2024.03.24 |
[디자인패턴] 생성 패턴(2) : 추상 팩토리(Abstract Factory) (1) | 2024.03.24 |
[디자인패턴] 생성 패턴(1) : 심플 팩토리(Simple Factory) (0) | 2024.03.24 |