[Kotlin] 범위 지정 함수

업데이트:

💎 코틀린 범위 지정 함수 🚦

범위 지정 함수는 let, with, run, apply, also 가 있다. 이들의 차이점이 무엇인지 설명을 봐도 크게 차이점이 와닿지가 않는다😂 그래서 이참에 제대로 알아보고자 포스팅을 해본다. 우선 범위 지정 함수의 쓰임새와 기능을 살펴보자.
 


🎧 범위 지정 함수

어떤 객체의 특정 범위(scope) 내에서 범위 지정 함수를 호출하면 임시 범위가 형성되는데, 이 범위에서 이름없이 객체(this 또는 it)에 접근할 수 있다. 이러한 기능을 가진 함수를 범위 지정 함수라고 한다.

  • 범위 지정 함수 두가지 구성 요소
    • 수신 객체
    • 수신 객체 지정 람다
  • 주요 차이점
    • 객체가 블록 내에서 사용 가능한지 여부
    • 전체 표현식의 결과
       
apply 함수
fun <T> T.apply(block: T.() -> Unit): T
  • 인자에 수신 객체 지정 람다를 전달
  • 리턴 값은 수신 객체
     
let 함수
fun <T, R> T.let(block: (T) -> R): R
  • let 함수를 호출하는 수신자 객체를 블록의 인자로 넘긴다.
  • 블록의 결과값을 반환
     
with 함수
fun <T, R> with(receiver: T, block: T.() -> R): R
  • 비 확장함수
  • context 객체를 인자로 전달 받고, 람다 내부에서 이를 수신자로 사용
  • null 안정성 지원 x
     
run 함수
fun <T, R> T.run(block: T.() -> R): R
  • 값 계산이 필요할 때
  • 여러개의 지역 변수의 범위를 제한하기 위해 사용
  • 이미 생성된 객체의 메서드나 필드를 연속적으로 호출할 때 사용
     
also 함수
fun <T> T.also(block: (T) -> Unit): T
  • 수신 객체 람다가 전달된 수신 객체를 전혀 사용하지 않거나
  • 수신 객체의 속성을 변경하지 않고 사용하는 경우
  • 디버그 로깅 등 오브젝트를 변경하지 않을 때 사용

 
 
[참고]
https://salix97.tistory.com/224
https://dongsik93.github.io/til/2020/05/19/til-kotlin-scoping-function/

태그:

카테고리:

업데이트: