0Pricing
Android Academy · 강의

let, also와 범위 함수

널을 허용하는 값을 다뤄 보세요.

let, also와 범위 함수은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

스코프 함수란 무엇인가요?

스코프 함수를 사용하면 객체의 문맥에서 코드 블록을 실행할 수 있습니다. 특히 널 허용 값과 함께 사용할 때 코드를 더 간결하게 만들 수 있습니다.

이 레슨에서는 널 안전성에 가장 유용한 두 함수인 let과 also, 그리고 이 함수들이 안전 호출 연산자와 어떤 관계가 있는지 살펴봅니다.

let 함수

let은 블록을 실행하고 객체를 it으로 전달합니다. 블록이 반환하는 값을 그대로 반환합니다.

값을 변환하거나 임시 이름의 스코프를 제한할 때 유용합니다.

fun main() {
    val length = "Kotlin".let { it.length }
    println(length)  // prints: 6
}

널 안전성을 위한 let

?.와 let을 함께 사용하면 값이 null이 아닐 때만 블록을 실행할 수 있습니다. 블록은 값을 it으로 받아 한 번 실행됩니다.

값이 null이면 블록 전체를 건너뜁니다.

fun main() {
    val name: String? = "Ada"
    name?.let {
        println("Hello, " + it)
    }
}

null일 때 건너뛰기

수신 객체가 null이면 ?.let은 아무 작업도 하지 않습니다. 블록은 실행되지 않습니다.

name이 null이므로 이 프로그램은 아무것도 출력하지 않습니다.

fun main() {
    val name: String? = null
    name?.let {
        println("Hello, " + it)
    }
}

it 이름 바꾸기

it 대신 매개변수에 더 명확한 이름을 지정할 수 있습니다. 긴 블록에서 가독성이 좋아집니다.

화살표를 사용해 이름을 명시적으로 지정합니다.

val name: String? = "Bo"
name?.let { value ->
    println(value.uppercase())
}

also 함수

also도 객체를 it으로 전달하지만, 블록의 결과 대신 원래 객체를 반환합니다.

체인에서 값을 변경하지 않은 채 로깅과 같은 부수 효과를 추가할 때 유용합니다.

fun main() {
    val n = 5.also { println("got " + it) }
    println(n)  // prints: 5
}

let과 also의 반환 값 비교

핵심적인 차이는 다음과 같습니다. let은 블록의 결과를 반환하고, also는 원래 객체를 반환합니다.

변환하려면 let을 사용하고, 값을 변경하지 않고 확인만 하려면 also를 사용합니다.

val a = "hi".let { it.length }   // a = 2 (Int)
val b = "hi".also { it.length }  // b = "hi" (String)

로깅을 위한 also

also는 객체를 반환하므로 체인의 중간에 넣어 흐름 중간의 값을 확인할 수 있습니다.

여기서는 널 허용 값이 실제로 있을 때만 로깅한 다음, 그 값을 계속 사용합니다.

fun main() {
    val token: String? = "abc"
    val result = token?.also { println("token: " + it) }
    println(result)
}

Elvis와 함께 사용하는 let

?.let을 Elvis 연산자와 함께 사용하면 값이 null일 때 대체 동작을 제공할 수 있습니다.

값이 있으면 블록이 결과를 만들고, null인 경우는 Elvis 연산자 뒤의 표현식이 처리합니다.

fun main() {
    val raw: String? = null
    val out = raw?.let { it.trim() } ?: "empty"
    println(out)  // prints: empty
}

스코프 함수 선택하기

널 안전성을 위해 블록 안에서 null이 아닌 값을 변환하거나 사용하려면 let을 사용합니다. 부수 효과를 추가하면서 원래 객체를 유지하려면 also를 사용합니다.

두 함수 모두 안전 호출 연산자와 자연스럽게 함께 사용할 수 있어 null로 인한 충돌을 방지합니다.

user?.let { save(it) }      // transform/use
user?.also { log(it) }      // side effect, keep user

종합 예제

이 프로그램은 ?.let으로 메시지를 만들고, Elvis 연산자로 대체 값을 사용합니다. 일상적으로 사용하는 널 안전 Kotlin의 흐름을 보여 줍니다.

명시적인 null 확인은 없지만 완전히 안전합니다.

fun main() {
    val city: String? = "Goreme"
    val label = city?.let { "City: " + it } ?: "Unknown"
    println(label)
}

빠른 확인

let과 also에 대한 이해도를 확인해 보세요.

요약

스코프 함수는 객체의 문맥에서 코드 블록을 실행합니다. let은 객체를 it으로 전달하고 블록의 결과를 반환하며, also는 it을 전달하고 원래 객체를 반환합니다.

?.let을 사용하면 값이 null이 아닐 때만 해당 값으로 작업할 수 있습니다. 다음에는 이러한 개념을 함께 사용해 NullPointerExceptions를 완전히 방지하는 방법을 알아봅니다.

자주 묻는 질문

“let, also와 범위 함수” 강의는 무료인가요?

네 — “let, also와 범위 함수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“let, also와 범위 함수”에서 뭘 배우나요?

널을 허용하는 값을 다뤄 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Android Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“let, also와 범위 함수” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 널 허용 형식과 널 불허 형식
  2. 안전한 호출과 Elvis
  3. let, also와 범위 함수
  4. NullPointerExceptions 방지하기
← Android Academy(으)로 돌아가기