[Kotlin 깃북] Ch3 코틀린 사용을 위한 기본 문법 10. 스코프 함수

0
post-thumbnail

[Kotlin 깃북] Ch3 코틀린 사용을 위한 기본 문법

10. 스코프 함수

  • 스코프 함수(Scope Function): 코드를 축약해서 표현할 수 있도록 도와주는 함수
    (run, let, apply, also, with)

run

  • 스코프 함수 안에서 호출한 대상 this로 사용 가능
  • this 생략하고 바로 메서드/프로퍼티 호출 가능
var list = mutableListOf("Scope", "Function")

//val listSize = list.size
list.run {
    val listSize = size //this. 생략 가능
    //val listSize = this.size
 
    println("list의 길이 run = $listSize")
}

apply, with

  • run과 같이, 스코프 함수 안에서 호출한 대상 this로 사용 가능
var list = mutableListOf("Scope", "Function")

list.apply {
    val listSize = size //this. 생략 가능
    //val listSize = this.size
    println("리스트의 길이 apply = $listSize")
}

with (list){
    val listSize = size //this. 생략 가능
    //val listSize = this.size
    println("리스트의 길이 with = $listSize")
}
  • 호출 대상이 null일 경우, with 사용 권장 X
    -> 확장(Extension) 함수인 run, apply 사용 권장
//Safe call
target?.run { /* 코드 */ }
target?.apply { /* 코드 */ }

let

  • 스코프 함수 안에서 호출한 대상 it으로 사용 가능
  • it 생략 불가능
    -> 다른 이름으로 변경 가능
var list = mutableListOf("Scope", "Function")

//val listSize = list.size
list.let { it -> //it -> 생략 가능
    val listSize = it.size //it. 생략 불가능
    println("리스트의 길이 let = $listSize")
}

list.let { target -> //it을 target으로 이름 변경
    val listSize = target.size 
    println("리스트의 길이 let = $listSize")
}

also

  • let과 같이, 스코프 함수 안에서 호출한 대상 it으로 사용 가능
var list = mutableListOf("Scope", "Function")

list.also { //it -> 생략
    val listSize = it.size //it. 생략 불가능
    println("리스트의 길이 also = $listSize")
}
list.also { target -> //it을 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") //[Scope, Function, Apply]

val afterAlso = list.also {
    it.add("Also")
    it.count()
}
println("also의 반환값 = $afterAlso") //[Scope, Function, Apply, Also]

마지막 실행 코드 반환: let, run, with

  • 스코프 함수 안에 마지막 실행 코드의 결과값 반환
var list = mutableListOf("Scope", "Function")

val afterLet = list.let {
    it.add("Let")
    it.count()
}
println("let의 반환값 = $afterLet") //3

val afterRun = list.run {
    add("Run")
    count()
}
println("run의 반환값 = $afterRun") //4

val afterWith = with(list){
    add("With")
    count()
}
println("with의 반환값 = $afterWith") //5
profile
Be able to be vulnerable, in search of truth

0개의 댓글