반응형
스코프 함수에는 run, with, apply, also, let이 있다.
run
- 스코프 함수 내에서, 호출한 대상을 this로 사용할 수 있다
- 마지막 실행 코드를 반환한다
var list = mutableListOf("Scope", "Function")
// 호출 대상을, 스코프 함수 내에서 this로 사용가능
val sz = list.run {
val listSize = this.size // this == list
println("Length of List : ${listSize}")
listSize // 마지막 실행 코드를 반환함
}
println("Length of List : ${sz}")
------------------
OUTPUT :
Length of List : 2
Length of List : 2
run은 말 그대로, '실행'의 의미에 가깝다.
이미 만들어진 '인스턴스/변수' 의 값 또는 그것을 이용한 특정 계산 결과가 필요할 때 사용하면 좋겠다.
with
- run과 똑같다.
var list = mutableListOf("Scope", "Function")
// 호출 대상을, 스코프 함수 내에서 this로 사용가능
val sz = with(list) {
val listSize = this.size // this == list
println("Length of List : ${listSize}")
listSize // 마지막 실행 코드를 반환함
}
println("Length of List : ${sz}")
------------------
OUTPUT :
Length of List : 2
Length of List : 2
다른 점이 없다.
apply
- 스코프 함수 내에서, 호출한 대상을 this로 사용할 수 있다
- 호출 대상인 this 자체를 반환한다
var list = mutableListOf("Scope", "Function")
// 호출 대상을, 스코프 함수 내에서 this로 사용가능
val newlist = list.apply {
list.add("ADD")
}
println(newlist)
------------------
OUTPUT :
[Scope, Function, ADD]
run이 apply와 다른 점 하나는, 반환값이 호출 대상인 this 그 자체인 것이다.
apply는 정말 '적용'의 이름값을 한다.
아마 익명 객체와 동시에 사용하면 더 이해가 빠를 것이다
val newlist = mutableListOf("Scope", "Function").apply {
list.add("ADD")
}
새로 적용하여 리스트를 생성하는 느낌이다.
also
- run과 모든점이 같지만, 다른점은 this 대신 it을 사용한다는 것이다
let
- apply와 모든점이 같지만, 다른점은 this 대신 it을 사용한다는 것이다
마지막 실행 코드를 반환 : let, run, with
호출 대상을 반환 : apply, also
this 사용 : run, apply, with
it 사용 : also, let
run | with | apply | also | let | |
참조 | this | this | this | it | it |
반환 | 마지막 실행 코드 | 마지막 실행 코드 | 호출 대상 | 호출 대상 | 마지막 실행 코드 |
개인적인 생각으론
this를 사용하며, 호출 대상인 this 자체를 반환하는 apply와
it을 사용하며, 마지막 실행 코드를 반환하는 let 두 개만 알고 사용하면
별 무리가 없을 것 같다고 생각하고 있다.
반응형
'[Android] > [Kotlin]' 카테고리의 다른 글
코틀린 심화문법 - 람다, 고차함수 (0) | 2023.01.12 |
---|---|
람다 활용 개념 / 람다 팁 / 리스너 구현 (0) | 2023.01.12 |
코틀린 심화문법 - 지연 초기화 (0) | 2023.01.11 |
[안드로이드 강의작성] View Binding이란 ( Feat. Data Binding ) (0) | 2023.01.10 |
코틀린 심화문법 (1) | 2023.01.03 |