Kotlin의 scope function에 대해 정리해보았다.

Kotlin Scope Function

Kotlin에는 객체의 컨텍스트에서 코드를 실행할 수 있도록 다양한 scope function이 제공됩니다. 대표적으로 let, run, with, apply, also가 있습니다. 각각의 함수는 객체를 어떻게 참조하고, 반환값이 무엇인지에 따라 구분됩니다.

let

  • 객체를 람다의 인자로 전달 (it)
  • 람다의 결과를 반환
  • 주로 null 체크, 임시 범위 제한 등에 사용
val result = str?.let {
    println(it)
    it.length
}

run

  • 객체를 람다의 receiver(this)로 사용
  • 람다의 결과를 반환
  • 객체 초기화와 계산 결과 반환에 적합
val length = str?.run {
    println(this)
    length
}

with

  • 객체를 람다의 receiver(this)로 사용
  • 람다의 결과를 반환
  • 비확장 함수, 여러 객체의 연산을 묶을 때 사용
val result = with(str) {
    println(this)
    length
}

apply

  • 객체를 람다의 receiver(this)로 사용
  • 객체 자신을 반환
  • 객체 설정/초기화에 주로 사용
val person = Person().apply {
    name = "Choi"
    age = 29
}

also

  • 객체를 람다의 인자로 전달 (it)
  • 객체 자신을 반환
  • 부수작업(로깅, 디버깅 등)에 사용
val list = mutableListOf<Int>()
list.also {
    println("리스트 초기화: $it")
}.add(1)

비교 요약

함수 람다의 수신 객체 반환값 주 사용처
let it 람다 결과 null 체크, 임시 범위
run this 람다 결과 객체 초기화, 계산
with this 람다 결과 여러 연산 묶기
apply this 객체 자신 객체 설정/초기화
also it 객체 자신 부수작업

Kotlin의 scope function을 적절히 활용하면, 코드의 가독성과 유지보수성을 높일 수 있습니다.