빌더 패턴(Builder Pattern)은 복잡한 객체를 단계별로 구성하는 데 사용되는 디자인 패턴입니다. 이를 통해 객체의 유연한 생성이 가능합니다.
이 패턴은 수많은 선택적 매개변수가 있는 객체를 생성할 때 특히 유용하며, 코드를 깔끔하고 읽기 쉽게 유지하는 데 도움이 됩니다. 또한 빌더 패턴은 복잡한 객체의 구성과 다양할 수 있는 표현을 분리하여 코드의 유지 관리성을 향상시킵니다. 그 결과, 더 쉽게 이해하고 유지 관리할 수 있고 관리하기 쉽고 확장 가능한 코드베이스가 만들어 집니다.
Computer.cs
/// <summary>
/// Computer
/// </summary>
public class Computer
{
public string? CPU { get; private set; }
public string? RAM { get; private set; }
public string? Storage { get; private set; }
public string? GraphicsCard { get; private set; }
public Computer(ComputerBuilder builder)
{
CPU = builder.CPU;
RAM = builder.RAM;
Storage = builder.Storage;
GraphicsCard = builder.GraphicsCard;
}
public override string ToString()
{
return $"CPU: {CPU}, RAM: {RAM}, Storage: {Storage}, GraphicsCard: {GraphicsCard}";
}
}
C#ComputerBuilder.cs
/// <summary>
/// ComputerBuilder
/// </summary>
public class ComputerBuilder
{
public string? CPU { get; private set; }
public string? RAM { get; private set; }
public string? Storage { get; private set; }
public string? GraphicsCard { get; private set; }
public ComputerBuilder SetCPU(string cpu)
{
CPU = cpu;
return this;
}
public ComputerBuilder SetRAM(string ram)
{
RAM = ram;
return this;
}
public ComputerBuilder SetStorage(string storage)
{
Storage = storage;
return this;
}
public ComputerBuilder SetGraphicsCard(string graphicsCard)
{
GraphicsCard = graphicsCard;
return this;
}
public Computer Build()
{
return new Computer(this);
}
}
C#Program.cs
var computer = new ComputerBuilder()
.SetCPU("Intel Core i9")
.SetRAM("32GB")
.SetStorage("2TB NVMe SSD")
.SetGraphicsCard("NVIDIA RTX 3090")
.Build();
Console.WriteLine(computer);
C#The beauty of this code lies in
- 메서드 체이닝: SetCPU 및 SetRAM과 같은 메서드는 ComputerBuilder 인스턴스를 반환하므로 메서드를 체인으로 호출할 수 있습니다. 이렇게 하면 코드가 더 읽기 쉽고 사용하기 쉬워집니다.
- Fluent 인터페이스: 빌더 메서드는 빌더 개체 자체를 반환하므로 유창하고 직관적인 API가 가능합니다.
- 불변성: 구성 요소가 설정되면 변경할 수 없으므로 일관성 없는 상태 변경으로부터 개체를 안전하게 만듭니다.
- 관심사의 분리: 구성 프로세스가 표현과 분리되어 코드를 더 쉽게 유지 관리하고 확장할 수 있습니다.