Dev./Kotlin
[Kotlin] Scope Functions
인쥭
2023. 10. 23. 11:07
반응형
Scope Function이란?
- 코틀린의 stlib은 let과 run, with, apply, also라는 다섯 개의
scope function
을 제공한다. - 이러한 함수들은 모두 1. 주어진 객체와 함께 2. 블록의 코드를 실행하여 3. 결과를 반환한다는 공통점을 갖는다.
- scope function은 모두 코드를 간결하게 하고 가독성을 향상시키는 데에 의의가 있다.
function | obj ref | returns |
---|---|---|
let | it | lambda result |
run(Any.run 형태로 실행) | this | lambda result |
run(수신 객체 없이 실행) | - | lambda result |
with | this | lambda result |
apply | this | ctx obj |
also | it | ctx obj |
선택 기준
상술한 Scope Function 중 무엇을 사용할지는 람다 블록 내의 obj reference와 반환 값 외에도 아래와 같은 기준으로 선택해볼 수 있다.
let
- not-null 객체로 람다 블록을 실행해야하는 경우
- 또는 가독성을 위한 변수를 로컬 scope에 선언하고자하는 경우
0.let { id -> if(id == 0) throw RuntimeException(id) }
같은 경우를 말하는 듯하다.
run
- 객체를 설정한 후, 임의의 결과를 연산해야 하는 경우
- 표현식이 필요한 곳에서 결과를 연산하되, 확장 함수로 사용할 필요가 없는 경우
apply
apply the following assignments to the object.
- 객체를 설정해야 하는 경우
also
and also do the following with the object.
- 사이드 이펙트가 필요한 경우
- 어떤 객체가 갖는 프로퍼티나 함수보다는 객체 자체를 사용하고 싶은 경우
- outer scope의 this 참조를 섀도잉하고 싶지 않은 경우
with
with this object, do the following.
- 임의의 객체를 활용하는 함수 호출을 그룹화하고자하는 경우
- 굳이 반환된 결과를 사용하고 싶지는 않은 경우
참고