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.
  • 임의의 객체를 활용하는 함수 호출을 그룹화하고자하는 경우
  • 굳이 반환된 결과를 사용하고 싶지는 않은 경우

참고

 

Scope functions | Kotlin

 

kotlinlang.org

 

Coding conventions | Kotlin

 

kotlinlang.org