9. 스코프 함수 (Scope Functions)
스코프 함수(let, run, with, apply, also)는 객체의 컨텍스트 내에서 특정 블록(스코프)의 코드를 실행하는 함수입니다.
객체의 이름을 반복해서 쓰지 않고 초기화나 체이닝 작업을 할 때 코드를 우아하게 묶어주는 역할을 합니다. 각각 반환값(람다의 결과 vs 객체 자신)과 수신 객체 접근 방식(it vs this)에 차이가 있습니다.
class Robot(var name: String, var battery: Int) {
fun status() = "이름: $name, 배터리: $battery%"
}
fun main() {
// 1. apply: 객체 생성과 동시에 초기화 셋팅을 할 때 가장 많이 쓰입니다. (자신을 반환)
// 블록 안에서는 'this'로 접근 (생략 가능)
val r1 = Robot("R2D2", 10).apply {
battery = 100 // this.battery = 100 과 동일
name = "Super R2D2"
}
println(r1.status())
// 2. let: null 체크(?.)와 함께 연계하여 값이 있을 때만 무언가 할 때 자주 쓰입니다. (블록의 마지막 줄 반환)
// 블록 안에서는 'it'으로 접근
var nullableName: String? = "Kotlin"
val lengthMessage = nullableName?.let {
println("문자열 $it 이(가) null이 아닙니다!")
"길이는 ${it.length} 입니다." // 이 값이 반환되어 lengthMessage에 들어감
}
println(lengthMessage)
}