[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/