빌더 (Builder) 디자인패턴

빌더(Builder) 디자인 패턴은 복잡한 객체를 생성하는 과정을 단계별로 분리하여 코드의 가독성과 유연성을 높이는 패턴입니다. 빌더 패턴은 주로 객체 생성 시 필요한 매개변수가 많거나, 객체 생성 과정이 복잡한 경우에 사용됩니다. Swift에서 간단한 예제를 통해 빌더 패턴을 살펴보겠습니다:

// Product
struct Burger {
    let bun: String
    let patty: String
    let cheese: String?
    let toppings: [String]
}

// Builder protocol
protocol BurgerBuilder {
    var bun: String { get set }
    var patty: String { get set }
    var cheese: String? { get set }
    var toppings: [String] { get set }

    func build() -> Burger
}

// Concrete Builder
class ClassicBurgerBuilder: BurgerBuilder {
    var bun: String = "Sesame Bun"
    var patty: String = "Beef Patty"
    var cheese: String? = "Cheddar"
    var toppings: [String] = ["Lettuce", "Tomato", "Onion", "Pickle"]

    func build() -> Burger {
        return Burger(bun: bun, patty: patty, cheese: cheese, toppings: toppings)
    }
}

// 사용 예시
let classicBurgerBuilder = ClassicBurgerBuilder()
classicBurgerBuilder.cheese = "Swiss"
classicBurgerBuilder.toppings.append("Mushroom")

let customBurger = classicBurgerBuilder.build()

위 예제에서 Burger 구조체는 복잡한 객체인 “Product”를 나타냅니다. BurgerBuilder 프로토콜은 빌더의 인터페이스를 정의하며, 객체를 생성하기 위한 각종 속성 및 build() 메서드를 포함합니다.

ClassicBurgerBuilder는 BurgerBuilder 프로토콜을 구현하는 구체적인 빌더 클래스입니다. 이 클래스는 클래식 버거의 기본 구성 요소를 설정하며, build() 메서드를 통해 Burger 인스턴스를 생성합니다.

사용 예시에서 ClassicBurgerBuilder 인스턴스를 생성하고, 치즈와 토핑을 변경하여 사용자 정의 버거를 만듭니다. build() 메서드를 호출하여 최종 Burger 인스턴스를 얻습니다.

이 예제는 빌더 디자인 패턴을 사용하여 복잡한 객체를 생성하는 과정을 단계별로 분리하는 방법을 보여줍니다. 이 패턴은 객체 생성 과정의 가독성과 유연성을 높여주며, 필요한 경우 쉽게 객체 생성 방법을 변경할 수 있도록 합니다.

답글 남기기

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