Kotlin - 7.스코프 함수 다루기

Kotlin 문법 배우기

코틀린의 스코프 함수 (Scope functions)

스코프 함수 종류

함수 블록 안에서의 참조 반환값 주 사용 목적 비유
let it 람다의 결과 변환 값을 가공한다.
run this 람다의 결과 계산 수행 객체 안에서 계산한다.
with this 람다의 결과 여러 프로퍼티 사용 객체 없이 내부만 본다.
apply this 원래 객체 필드 초기화 객체를 구성한다.
also it 원래 객체 부수효과 지나가면서 한마디

1. let

객체를 it으로 참조하고, 람다의 결과값을 반환

주 사용 목적

  • null-safe 처리 (?.let)
  • 값 변환
  • 체이닝 중 중간 결과 제공

예시

val nameLength = user.name?.let {
    it.length // 반환값
}
  • it = user.name
  • let의 결과는 it.length (Int)

2. run

객체를 this로 참조하고, 람다의 결과값을 반환

주 사용 목적

  • 임시 블록에서 값 반환

예시

val greeting = user.run {
    "Hello, $name!" // 마지막 표현식이 반환
}
  • this = user
  • 반환값 = "Hello, 유저이름!"
  • let과 달리 this를 사용하므로 프로퍼티 접근 시 this.name 대신 name만 써도 됨

3. with

인자로 받은 객체를 컨텍스트로 사용 (this)
람다의 결과값을 반환 (run과 유사)
run과의 차이점은 객체를 인자로 받는 일반 함수라는 점

예시

val result = with(user) {
    "$name ($age 세)"
}
  • this = user
  • 반환값 = "유저이름 (유저나이 세)"

4. apply

객체를 this로 참조하고, 객체 자신을 반환

주 사용 목적

  • 객체 초기화 시 속성 설정 (빌더 패턴과 유사)

예시

val user = User().apply {
    name = "Alice"
    age = 30
}
  • this = User 인스턴스
  • 반환값 = 속성 설정 된 User 객체

5. also

객체를 it으로 참조하고, 객체 자신을 반환

주 사용 목적

  • 로깅, 디버깅, 부수효과
  • 객체를 유지하면서 추가 작업 수행

예시

val user = User("Alice").also {
    println("Created user: ${it.name}")
}
  • it = User 객체
  • 반환값 = 동일한 User 객체 (변경되지 않음)