Intro

코틀린은 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 기능을 지원한다 → 수신 객체 지정 람다 (=범위 지정 함수)

각 함수들은 비슷 비슷하게 보이기에 헷갈리기 마련이지만, 다행히 ‘Kotlin’ 공식 문서에서 각 람다마다 사용하기 좋은 상황들을 제시하고 있다.

apply, with, let, also, run에 대해 알아보자

특징

먼저 각 함수들의 구현과 특징, 사용 예제 및 사용처에 대해 알아보자

apply

public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

<aside> 💡 수신 객체 람다 내부에서 수신 객체의 함수를 사용하지 않고, 프로퍼티만 사용/수정하며, 수신 객체 자신을 다시 반환 하려는 경우에 사용 ⇒ 객체의 초기화

</aside>

사용 예제

val adam = Person("Adam").apply {
    age = 32
    city = "London"        
}
println(adam)

run

public inline fun <T, R> T.run(block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block()
}