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)