[swift] Builder 디자인 패턴을 통한 객체 생성 과정 제어

앱을 개발하다 보면 복잡한 객체를 생성해야 하는 경우가 있습니다. 이럴 때 Builder 디자인 패턴을 사용하면 객체 생성 과정을 추상화하고 제어할 수 있습니다. 이 글에서는 이러한 상황에서 Builder 디자인 패턴을 어떻게 활용하는지 설명하겠습니다.

Builder 디자인 패턴이란?

Builder 디자인 패턴은 객체 생성 과정을 캡슐화하고, 복잡한 객체를 단계적으로 만들 수 있도록 하는 패턴입니다. 보통 생성할 객체의 속성들을 설정하는 메서드들을 제공하여, 사용자가 원하는 기능을 갖춘 객체를 만들 수 있도록 합니다.

Builder 디자인 패턴 예시

간단한 예시를 통해 Builder 디자인 패턴을 살펴보겠습니다. 스타일이 다양한 문서를 생성하는 프로그램을 만들 때, Builder 디자인 패턴을 사용하여 다양한 스타일의 문서를 생성할 수 있습니다.

먼저, 다음과 같이 Document 클래스가 있습니다.

class Document {
    var title: String?
    var body: String?
    var style: String?

    init(title: String?, body: String?, style: String?) {
        self.title = title
        self.body = body
        self.style = style
    }
}

그리고, DocumentBuilder 프로토콜과 여러 개의 DocumentBuilder 구현체를 만들어 Builder 디자인 패턴을 구현할 수 있습니다.

protocol DocumentBuilder {
    func setTitle(_ title: String) -> Self
    func setBody(_ body: String) -> Self
    func setStyle(_ style: String) -> Self
    func build() -> Document
}

class FancyDocumentBuilder: DocumentBuilder {
    private var title: String?
    private var body: String?
    private var style: String?

    func setTitle(_ title: String) -> Self {
        self.title = "Fancy: " + title
        return self
    }

    func setBody(_ body: String) -> Self {
        self.body = "Fancy: " + body
        return self
    }

    func setStyle(_ style: String) -> Self {
        self.style = "Fancy: " + style
    }

    func build() -> Document {
        return Document(title: title, body: body, style: style)
    }
}

위의 코드에서 FancyDocumentBuilderDocumentBuilder 프로토콜을 따르는데, 다양한 스타일의 문서를 생성할 수 있도록 각 속성을 설정하는 메서드들을 제공합니다.

이제, Builder를 사용하여 다른 스타일의 문서를 생성해보겠습니다.

let fancyDocument = FancyDocumentBuilder()
    .setTitle("Hello, Builder Pattern")
    .setBody("This is a fancy document.")
    .setStyle("Fancy")
    .build()

위의 코드에서 fancyDocumentFancyDocumentBuilder를 사용하여 만들어진 문서입니다. 이처럼 Builder 디자인 패턴을 사용하면 객체 생성 과정을 더욱 유연하게 제어할 수 있습니다.

정리

Builder 디자인 패턴을 사용하면 복잡한 객체를 생성하는 과정을 캡슐화하고, 단계적으로 만들 수 있습니다. 이를 통해 코드의 유연성을 높일 수 있으며, 객체를 생성하는 과정을 추상화하여 사용자가 원하는 기능을 가진 객체를 만들 수 있습니다. Builder 디자인 패턴은 객체 생성에 관련된 복잡한 작업을 단순화하고, 가독성을 높이는데 도움이 됩니다.

참고 문헌: