제라스의 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
반응형