User 클래스

data class User(
	val id: Int,
	val name: String
)


User 클래스의 빌더 클래스

class UserBuilder {
    var id: Int = 0
    var name: String = ""
    
    fun append(id: Int): UserBuilder {
        this.id = id
        return this
    }
    
    // 없어도 되지만 여러가지 테스트 해보기위해 추가
    fun appendId(id: Int): UserBuilder {
        this.id = id
        return this
    }
    
    fun append(name: String): UserBuilder {
     	this.name = name
        return this
    }
    
    // 없어도 되지만 여러가지 테스트 해보기위해 추가
    fun appendName(name: String): UserBuilder {
     	this.name = name
        return this
    }
    
    fun build(): User {
        return User(id, name)
    }
}


빌더를 사용하는 고차함수 전달받기

fun buildUser(buildBlock: UserBuilder.() -> Unit): User {
    val builder = UserBuilder()
    builder.buildBlock()
    return builder.build()
}


빌더 패턴 사용하기

fun main() {
    val user1 = UserBuilder().append(1).append("albert").build()
    println(user1)
    
    val user2 = buildUser {
        append(2)
        append("albert2")
    }
    println(user2)
    
    val user3 = buildUser {
        appendId(3)
        appendName("albert3")
    }
    println(user3)
}

<br>

>>> User(id=1, name=albert1)
>>> User(id=2, name=albert2)
>>> User(id=3, name=albert3)



Kotlin koans 의 Builder 부분을 보다가 생각나서 한번 시도해봤다. koans 에는 StringBuilder, HashMap 등을 사용한 예제가 나와있다.



-> Code 보러가기