Day 6 – Builder Pattern

빌더 패턴(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가 가능합니다.
  • 불변성: 구성 요소가 설정되면 변경할 수 없으므로 일관성 없는 상태 변경으로부터 개체를 안전하게 만듭니다.
  • 관심사의 분리: 구성 프로세스가 표현과 분리되어 코드를 더 쉽게 유지 관리하고 확장할 수 있습니다.

Links

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다