반응형
let : 호출하는 객체를 이어지는 블록의 인자로 넘기고 블록의 실행 결과를 반환(인자가 한 개 일 경우 it으로 대체 가능)
class A {
fun get() {
println("get A")
}
}
A?.let {
it.get() // "get A"
}
apply : 호출하는 객체를 이어지는 블록의 리시버로 전달하고 객체 자체를 반환
class A {
var a : Int
var b : Int
var c : Int
fun setA(n : Int) {
a = n
}
fun setB(n : Int) {
b = n
}
fun setC(n : Int) {
c = n
}
}
val result = A.apply {
setA(1)
setB(2)
setC(3)
}
// 아래처럼 쓰는 것을 위 apply로 간단하게 대체
val result2 = A
result2.setA(1)
result2.setB(2)
result2.setC(3)
run : 호출하는 객체를 이어지는 블록의 리시버로 전달하고 블록의 실행 결과값을 반환. apply와 비슷하지만 안전 호출이 가능하다는 점, 객체가 아니라 결과값을 반환한다는 점, 이미 생성된 객체에 사용한다는 점이 다르다.
class A {
var a : Int
var b : Int
var c : Int
fun setA(n : Int) {
a = n
}
fun setB(n : Int) {
b = n
}
fun setC(n : Int) {
c = n
}
}
A?.run {
setA(1)
setB(2)
setC(3)
}
with : 인자로 받는 객체를 이어지는 블록의 리시버로 전달하고 블록의 실행 결과값을 반환. run과 아주 유사하며 인자의 위치와 안전 호출 가능 여부가 차이난다.
class A {
var a : Int
var b : Int
var c : Int
fun setA(n : Int) {
a = n
}
fun setB(n : Int) {
b = n
}
fun setC(n : Int) {
c = n
}
}
with(A) {
setA(1)
setB(2)
setC(3)
}
// A?.run{}이 아래 구문과 동일하게 작동한다. 결국 run은 let + with라고 보면 무방하다
A?.let {
with(it){
setA(1)
setB(2)
}
}
더 자세한 내용은 아래 사이트 참조
https://www.androidhuman.com/lecture/kotlin/2016/07/06/kotlin_let_apply_run_with/
반응형
댓글