Swift/Swift CS
[Swift 기초문법 - 37] 디자인패턴 Builder
힛해
2024. 8. 15. 08:38
728x90
Builder 패턴이란?
만들어주는 것을 만든다.
자기 자신을 내뱉는게 핵심이다
struct Pet {
var name : String? = nil
var age : Int? = nil
}
class PetBuilder {
private var pet : Pet = Pet()
func withName(_ name : String) -> Self{
pet.name = name
retrun self
}
func withAge(_ age : Int) -> Self{
pet.age = age
return self
}
func build() -> Pet{
return self.pet
}
}
let myPet = PetBuilder().withName("야옹이").withAge(10).build()
myPet // Pet(name : 야옹이 . age : 10)
빌더 패턴은 간단하다.
내가 원하면 빼고 원하면 추가하고
// 원하는 변수만 넣어서 생성할 수 있다.
let myPet = PetBuilder().withName("야옹이").build()
마지막에 빌드만 하면 완성이 되는 것이 일반적인 빌더 패턴
다른 방식도 있다.
struct Pet{
var name : String? = nil
var age : Int? = nil
// 1.
init(){}
// 2.
init(builder:SecondPetBuilder){
self.name = builder.name
self.age = builder.age
}
}
class SecondPetBuilder {
var name : String? = nil
var age : Int? = nil
typealias BuilderClosure = (SecondPetBuilder) -> ()
init(buildClosure : BuilderClosure){
buildClosure(self)
}
}
이렇게 만들면 기존의 생성자도 있고 빌더를 활용한 생성자도 사용할 수 있게 할 수 있다.
사용시
let petBuilder = SecondPetBuilder { bulder in
builder.name = "댕댕이"
builder.age = 10
}
// 자기 자신을 넣는 방식
let mySecondPet = Pet(builder: petBuilder)