목록으로
Kotlin

apply, let, run, also, with

Dev Park
5/18/2024
40 views

서론

코틀린에서 apply, let, run, also, with는 범위 지정 함수(Scope function)으로 불리며, 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수이다.
오늘은 이 함수들의 차이에 대해서 알아보자.

apply

apply는 수신 객체의 프로퍼티를 변경한 후, 수신 객체 자체를 반환하는 함수이다.
객체 생성 시에 다양한 프로퍼티를 설정해야 하는 경우에 자주 사용된다.

Kotlin
1val person = Person().apply { 2 name = "wonyeop" 3 age = 26 4}

run

apply와 같이 동작하지만, 객체를 반환하는대신 마지막 라인의 결과를 반환한다.

Kotlin
1val person = Person().apply { 2 name = "wonyeop" 3 age = 26 4} 5 6val result = person.run { 7 age++ 8} 9 10println(result) // 27

with

run과 거의 같게 동작하지만, run은 확장 함수로 사용되고, with은 수신 객체를 파라미터로 받아서 사용한다.

Kotlin
1val person = Person().apply { 2 name = "wonyeop" 3 age = 26 4} 5 6val result = with(person) { 7 age++ 8} 9 10println(result) // 27

let

let은 객체의 확장함수이며, 객체를 it으로 사용할 수 있고, 반환값은 람다식의 결과이다.

kotlin
1val person = Person().apply { 2 name = "wonyeop" 3 age = 26 4} 5 6val result = person.let { 7 it.age = 24 8 "{age is $age}" 9} 10 11println(result) // age is 24

also

also는 객체의 확장함수이며, 객체를 it으로 사용할 수 있고, 반환값은 객체 자체이다.
also는 객체와 관련된 동작을 수행하는데 사용된다.

kotlin
1val person = Person().apply { 2 name = "wonyeop" 3 age = 26 4} 5 6person.also{it.age++} 7 8println(person.age) // 27