관리 메뉴

사과하는 제라스

[Swift 디자인패턴] Builder 패턴 본문

제라스의 Swift 공부/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
    반응형