제라스의 iOS 공부/Swift 디자인 패턴

[Swift 디자인패턴] Builder 패턴

Xerath(제라스) 2023. 8. 18. 15:56
728x90
반응형

디자인 패턴은 정말 많다. 

참조 github: https://github.com/ochococo/Design-Patterns-In-Swift#-builder

이렇게 크게 Behavioral, Creational, Structural 파트에서 여러가지 패턴들이 존재한다.

여기서 내가 들어본 건 Singleton 패턴 뿐이긴 하다.

 

이번에 공부한 패턴은 Creational 즉, 생성 시의 디자인 패턴 중 하나인 Builder 패턴이다.

 

먼저, 코드를 보면 다음과 같이 예시를 둘 수 있다.

import UIKit

// 일단 이런 Pet 모듈이 있다.
struct Pet {
    var name: String? = nil
    var age: Int? = nil
    init(){}
    init(builder: SecondPetBuilder){
        self.name = builder.name
        self.age = builder.age
    }
}

/* Builder 방식1 */
class PetBuilder {
    private var pet : Pet = Pet()
    func withName(_ name: String) -> Self {
        pet.name = name
        return self
    }
    
    func withAge(_ age: Int) -> Self {
        pet.age = age
        return self
    }
    func build() -> Pet {
        return self.pet
    }
}

let myPet = PetBuilder()
    .withAge(3)
    .withName("야옹이")
    .build()


/* Builder 방식2 */
class SecondPetBuilder {

    var name: String? = nil
    var age: Int? = nil

    typealias BuilderClosure = (SecondPetBuilder) -> ()

    init(buildClosure: BuilderClosure) {
        buildClosure(self)
    }
}

let petBuilder = SecondPetBuilder { builder in
    builder.name = "댕댕이"
    builder.age = 10
}

let mySecondPet = Pet(builder: petBuilder)

이렇듯 Builder 패턴은 어떤 객체를 생성 시에 기본적으로 어떤 값으로 초기화해서 생성할 것인지에 대한 생성 패턴 중 하나이다.

크게 2가지 방식이 있었는데 일단 나는 첫번째 방식이 직접 코드를 짤 때 순간적으로 자연스레 작성해낼 수 있는 코드가 아닐까 싶다.

물론 두번째 클로저를 활용한 방식도 충분한 공부가 필요하긴 하다.

728x90
반응형