PHpullh
학습 라이브러리/Kotlin/스코프 함수 — let, run, apply, also, with

KOTLIN · 함수

스코프 함수 — let, run, apply, also, with

객체를 컨텍스트로 하는 코드 블록 실행. 각각 수신자(this/it)와 반환값이 다릅니다.

함수중급letrunapplyalsowith

핵심 설명

객체를 컨텍스트로 하는 코드 블록 실행. 각각 수신자(this/it)와 반환값이 다릅니다.

Kotlin code

data class Person(var name: String, var age: Int, var email: String = "")

// let — it 참조, 변환 결과 반환, null 체크 관용구
val name: String? = "  Kotlin  "
val result = name?.let { it.trim().uppercase() }
// result = "KOTLIN"

// apply — this 참조, 수신자 객체 반환 (빌더 패턴)
val person = Person("", 0).apply {
    name = "Alice"
    age = 30
    email = "alice@example.com"
}

// also — it 참조, 수신자 객체 반환 (부가 작업)
val numbers = mutableListOf(3, 1, 4, 1, 5)
    .also { println("원본: $it") }
    .sorted()
    .also { println("정렬: $it") }

// run — this 참조, 람다 결과 반환
val greeting = person.run {
    "안녕, $name! 당신은 ${age}살입니다."
}

// with — 수신자를 인자로, 람다 결과 반환
val info = with(person) {
    "$name ($age세) — $email"
}

학습 팁

선택 기준: 객체 설정(빌더) → apply, null 체크/변환 → let, 부가 동작 추가 → also, 결과 계산 → run/with

주의할 점

apply 내부에서 this가 다른 클래스의 수신자와 충돌할 수 있습니다. 중첩 스코프 함수에서는 this@ClassName으로 명시하세요.

자주 묻는 질문

스코프 함수 — let, run, apply, also, with란 무엇인가요?

객체를 컨텍스트로 하는 코드 블록 실행. 각각 수신자( this / it )와 반환값이 다릅니다.

스코프 함수 — let, run, apply, also, with 학습 시 주의할 점은 무엇인가요?

apply 내부에서 this 가 다른 클래스의 수신자와 충돌할 수 있습니다. 중첩 스코프 함수에서는 this@ClassName 으로 명시하세요.