[Kotlin 깃북] Ch3 코틀린 사용을 위한 기본 문법
10. 스코프 함수
- 스코프 함수(Scope Function): 코드를 축약해서 표현할 수 있도록 도와주는 함수
(run, let, apply, also, with)
run
- 스코프 함수 안에서 호출한 대상 this로 사용 가능
- this 생략하고 바로 메서드/프로퍼티 호출 가능
var list = mutableListOf("Scope", "Function")
list.run {
val listSize = size
println("list의 길이 run = $listSize")
}
apply, with
- run과 같이, 스코프 함수 안에서 호출한 대상 this로 사용 가능
var list = mutableListOf("Scope", "Function")
list.apply {
val listSize = size
println("리스트의 길이 apply = $listSize")
}
with (list){
val listSize = size
println("리스트의 길이 with = $listSize")
}
- 호출 대상이 null일 경우, with 사용 권장 X
-> 확장(Extension) 함수인 run, apply 사용 권장
target?.run { }
target?.apply { }
let
- 스코프 함수 안에서 호출한 대상 it으로 사용 가능
- it 생략 불가능
-> 다른 이름으로 변경 가능
var list = mutableListOf("Scope", "Function")
list.let { it ->
val listSize = it.size
println("리스트의 길이 let = $listSize")
}
list.let { target ->
val listSize = target.size
println("리스트의 길이 let = $listSize")
}
also
- let과 같이, 스코프 함수 안에서 호출한 대상 it으로 사용 가능
var list = mutableListOf("Scope", "Function")
list.also {
val listSize = it.size
println("리스트의 길이 also = $listSize")
}
list.also { target ->
val listSize = target.size
println("리스트의 길이 also = $listSize")
}
스코프 함수의 반환값
호출 대상 반환: apply, also
- 스코프 함수 안에 코드가 모두 완료된 후, 호출 대상인 자기 자신 반환
var list = mutableListOf("Scope", "Function")
val afterApply = list.apply {
add("Apply")
count()
}
println("apply의 반환값 = $afterApply")
val afterAlso = list.also {
it.add("Also")
it.count()
}
println("also의 반환값 = $afterAlso")
마지막 실행 코드 반환: let, run, with
- 스코프 함수 안에 마지막 실행 코드의 결과값 반환
var list = mutableListOf("Scope", "Function")
val afterLet = list.let {
it.add("Let")
it.count()
}
println("let의 반환값 = $afterLet")
val afterRun = list.run {
add("Run")
count()
}
println("run의 반환값 = $afterRun")
val afterWith = with(list){
add("With")
count()
}
println("with의 반환값 = $afterWith")