apply, let, run, also, with
서론
코틀린에서 apply, let, run, also, with는 범위 지정 함수(Scope function)으로 불리며, 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수이다.
오늘은 이 함수들의 차이에 대해서 알아보자.
apply
apply는 수신 객체의 프로퍼티를 변경한 후, 수신 객체 자체를 반환하는 함수이다.
객체 생성 시에 다양한 프로퍼티를 설정해야 하는 경우에 자주 사용된다.
val person = Person().apply {
name = "wonyeop"
age = 26
}
run
apply와 같이 동작하지만, 객체를 반환하는대신 마지막 라인의 결과를 반환한다.
val person = Person().apply {
name = "wonyeop"
age = 26
}
val result = person.run {
age++
}
println(result) // 27
with
run과 거의 같게 동작하지만, run은 확장 함수로 사용되고, with은 수신 객체를 파라미터로 받아서 사용한다.
val person = Person().apply {
name = "wonyeop"
age = 26
}
val result = with(person) {
age++
}
println(result) // 27
let
let은 객체의 확장함수이며, 객체를 it으로 사용할 수 있고, 반환값은 람다식의 결과이다.
1
2
3
4
5
6
7
8
9
10
11
val person = Person().apply {
name = "wonyeop"
age = 26
}
val result = person.let {
it.age = 24
"{age is $age}"
}
println(result) // age is 24
also
also는 객체의 확장함수이며, 객체를 it으로 사용할 수 있고, 반환값은 객체 자체이다.
also는 객체와 관련된 동작을 수행하는데 사용된다.
1
2
3
4
5
6
7
8
val person = Person().apply {
name = "wonyeop"
age = 26
}
person.also{it.age++}
println(person.age) // 27
This post is licensed under CC BY 4.0 by the author.