[kotlin] 스코프 함수를 사용하여 조건에 맞는 객체 생성하기

Kotlin에서는 스코프 함수를 사용하여 조건에 맞는 객체를 생성하고 초기화할 수 있습니다. 스코프 함수는 apply, let, run, with, also 등이 있으며, 각각의 함수는 객체 조작 시 다양한 방식으로 사용할 수 있습니다.

apply 함수

apply 함수는 객체의 컨텍스트에서 코드 블록을 실행하고 컨텍스트 객체 자체를 반환합니다. 주로 객체를 생성하고 초기화하는데 사용됩니다.

val person = Person("Alice").apply {
    age = 30
    city = "New York"
}

let 함수

let 함수는 객체를 제한된 범위 내에서 사용하고자 할 때 유용합니다. 이 함수는 람다 함수를 호출하고 람다 함수에 수신 객체를 전달합니다.

val nameLength = name?.let {
    if (it.length > 10) {
        println("Name is too long")
        10
    } else {
        println("Name is valid")
        it.length 
    }
}

run 함수

run 함수는 수신 객체의 코드 블록을 실행한 후 결과 값을 반환합니다. 이 함수는 수신 객체 없이 코드 블록을 실행하거나 수신 객체를 더 많이 사용하고자 할 때 사용됩니다.

val message = StringBuilder().run {
    append("Hello, ")
    append("Kotlin!")
    toString()
}

with 함수

with 함수는 제공된 객체를 가져와 명시적으로 인스턴스의 멤버에 접근할 필요 없이 인스턴스의 메서드 및 속성에 엑세스할 수 있습니다.

val numbers = with(listOf(1, 2, 3)) {
    println("Items count: $size")
    sum()
}

also 함수

also 함수는 코드 블록을 실행하고 객체를 반환합니다. also 함수는 객체에 부작용이 필요할 때 유용합니다.

val result = mutableListOf<Int>().also {
    it.add(3)
    it.add(5)
}

스코프 함수를 활용하면 Kotlin에서 객체를 조건에 맞게 생성하고 초기화할 때 간결하고 가독성이 높은 코드를 작성할 수 있습니다.

참고: Kotlin 공식 문서 - Scope Functions