Scope Function이란: 람다를 사용하여 일시적인 영역을 만들고, 코드를 더 간결하게 만들거나, Method Chaining에 활용하는 함수를 Scope Function이라고 한다.
다음과 같은 코드가 있다
data class Person(
val name: String,
val age: Int
)
fun printPerson(person: Person?) {
if (person != null) {
println(person.name)
println(person.age)
}
}
이 코드를 Scope Function으로 리팩토링 해 보자
fun printPerson2(person: Person?) {
person?.let {
println(it.name)
println(it.age)
}
}
val person = Person("류욱상", 100)
val value1 = person.let {
it.age
}
val value2 = person.run {
this.age
}
val value3 = person.also {
it.age
}
val value4 = person.apply {
this.age
}
let과 run은 람다식의 결과가 반환된다.
also와 apply는 객체 그 자체가 반환된다.
let과 also는 람다 안에서 it이라는 키워드를 사용한다.
run과 apply는 this라는 키워드를 사용한다.
it과 this의 차이
with: this를 사용해 접근 하고, this는 생략 가능하다.
with(person) {
println(name)
println(this.age)
}