관리 메뉴

피터의 개발이야기

[Kotlin] Kotlin과 Builder 패턴 본문

Programming/Kotlin

[Kotlin] Kotlin과 Builder 패턴

기록하는 백앤드개발자 2024. 8. 27. 10:10
반응형

ㅁ 들어가며

ㅇ Java Spring의 Builder 패턴은 복잡한 생성자를 편리하게 생성할 수 있게 해준다.

ㅇ Kotlin은 기본적으로 Builder 패턴을 사용하지 않아도 되는 언어적 특징을 가지고 있다.

ㅇ 그럼에도 특정 상황에서는 Builder 패턴을 활용할 수 있다.

ㅇ Kotlin에서 Spring의 Builder 패턴을 사용하는 방법에 대해 알아보았다.

 

ㅁ Kotlin의 언어적 특징

ㅇ Kotlin은 기본 생성자와 함께 named arguments와 default parameters(기본값 선언) 기능을 제공한다. 

ㅇ 이 두 가지 기능을 활용하면, 자바에서 흔히 사용하는 Builder 패턴 없이도 객체를 유연하게 생성할 수 있다. 

// 샘플 dto
data class User(
    val name: String,
    val age: Int = 0,
    val email: String = "" 
)

// named arguments: 변수와 값이 명확하다
val user = User(name = "John Doe", age = 30)

// 기본값이 선언되어 있다면, 필요값만 선언해도 객체 생성이 가능하다.
User(name = "peterica")

ㅇ 위 코드에서 User 객체를 만들 때, 파라미터 이름을 명시하여 가독성을 높일 수 있다.

ㅇ 또한, age와 email 파라미터는 기본값을 가지므로 이름만 전달하면 객체를 생성할 수 있다.

  ㄴ 예를들어 peterica로 생성한 객체는 이름이 peterica, 나이는 0, email은 ""으로 객체가 생성된다.

 

ㅁ Kotlin에서 Builder 패턴 구현

  Kotlin에서 Builder 패턴을 구현하려면, 일반적으로 클래스 내부에 Builder 클래스를 정의하고, 필요한 필드를 설정하는 메서드를 제공한다. 마지막으로 build() 메서드를 통해 객체를 생성한다.

class User private constructor(
    val name: String,
    val age: Int,
    val email: String
) {
    data class Builder(
        var name: String = "",
        var age: Int = 0,
        var email: String = ""
    ) {
        fun name(name: String) = apply { this.name = name }
        fun age(age: Int) = apply { this.age = age }
        fun email(email: String) = apply { this.email = email }
        fun build() = User(name, age, email)
    }
}

val user = User.Builder()
    .name("peterica")
    .age(30)
    .email("peterica.se@kakaocorp.com")
    .build()

ㅇ 이 방법은 객체를 단계별로 생성할 수 있고, 필요한 필드만 설정할 수 있다. 

ㅇ 이를 통해 복잡한 객체를 Java Spring builder 패턴과 동일하게 객체 생성 과정을 명확하게 표현할 수 있다.

 

ㅁ 함께 보면 좋은 사이트

 Kotlin과 Builder 패턴

Kotlin의 빌더 패턴: 명확한 구문으로 복잡한 객체 만들기

 

반응형
Comments