개발/디자인패턴

[Design Pattern] Builder 패턴

도넛의용기 2023. 5. 25. 11:35

Builder 패턴은 객체 생성 과정을 단계별로 나누어, 사용자가 원하는 방식으로 객체를 생성할 수 있게 하는 디자인 패턴입니다. 주로 복잡한 객체를 생성할 때 유용하며, 가독성과 유연성을 높여줍니다.

코틀린에서는 Builder 패턴을 다음과 같이 구현할 수 있습니다.

먼저, 생성할 객체를 나타내는 클래스를 정의합니다. 예를 들어, Car 클래스를 정의해 보겠습니다.

 

data class Car(
    val brand: String,
    val model: String,
    val year: Int,
    val color: String,
    val price: Double
)

이제 Builder 클래스를 정의합니다. Builder 클래스는 Car 객체를 생성하기 위한 중간 단계 역할을 합니다.

 

class CarBuilder {
    private lateinit var brand: String
    private lateinit var model: String
    private var year: Int = 0
    private lateinit var color: String
    private var price: Double = 0.0

    fun brand(brand: String) = apply { this.brand = brand }
    fun model(model: String) = apply { this.model = model }
    fun year(year: Int) = apply { this.year = year }
    fun color(color: String) = apply { this.color = color }
    fun price(price: Double) = apply { this.price = price }

    fun build() = Car(brand, model, year, color, price)
}

위 코드에서는 각 필드를 설정하는 함수들이 apply를 사용하여 자신의 인스턴스를 반환함으로써 메서드 체이닝을 가능하게 합니다. 마지막으로 build() 메서드를 호출하여 최종적으로 Car 객체를 생성합니다.

Builder 패턴을 사용하여 Car 객체를 생성하는 예시는 다음과 같습니다.

 

fun main() {
    val car = CarBuilder()
        .brand("Toyota")
        .model("Camry")
        .year(2023)
        .color("Red")
        .price(30000.0)
        .build()

    println(car)
}

이렇게 Builder 패턴을 사용하면, 코드의 가독성이 높아지고 객체 생성 과정이 명확해집니다. 또한, 필요한 경우에만 특정 필드를 설정할 수 있어 유연성이 증가합니다.

'개발 > 디자인패턴' 카테고리의 다른 글

[Design Pattern] View Model of MVVM  (1) 2023.07.27
[Design Pattern] Factory 패턴  (0) 2023.05.25
[Design Pattern] Adapter 패턴  (0) 2023.05.25
[Design Pattern] MVVM 아키텍처 패턴  (1) 2023.05.22