0Pricing
Kotlin Academy · 강의

실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기

안전 호출을 연결하고 엘비스 연산자로 대체 값을 제공해 보세요.

실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

큰 영향을 주는 두 연산자

안전 호출 ?.은 수신 객체가 널이 아닌 경우에만 멤버를 호출합니다. Elvis 연산자 ?:는 왼쪽이 널일 때 대체값을 제공합니다.

안전 호출 기초

x?.member는 x가 널이면 null로 평가되고, 그렇지 않으면 member에 정상적으로 접근합니다.

fun main() {
    val name: String? = "Kotlin"
    val len: Int? = name?.length
    println(len) // 6
    val nope: String? = null
    println(nope?.length) // null
}

Elvis 연산자 기초

x ?: default는 x가 널이 아니면 x를 반환하고, 그렇지 않으면 오른쪽의 default를 반환합니다.

fun main() {
    val name: String? = null
    val display = name ?: "Anonymous"
    println(display) // Anonymous
}

안전 호출과 Elvis 결합

일반적인 관용구는 obj?.member ?: default입니다. 값을 읽고, 없으면 대체값을 사용합니다.

fun main() {
    val name: String? = null
    val length = name?.length ?: 0
    println("length = $length") // 0
}

안전 호출 연결

여러 단계에 걸쳐 ?.을 연결할 수 있습니다. 연결된 항목 중 하나라도 널이면 전체 표현식이 널로 단락 평가됩니다.

class Address(val city: String?)
class User(val address: Address?)
fun main() {
    val u: User? = User(Address(null))
    val city = u?.address?.city ?: "Unknown"
    println(city) // Unknown
}

오른쪽에서 예외를 발생시키는 Elvis

Elvis의 오른쪽에는 throw를 포함한 모든 표현식을 사용할 수 있으므로 필수 값 확인에 유용합니다.

fun loadConfig(path: String?): String {
    val p = path ?: throw IllegalArgumentException("path required")
    return "loaded $p"
}
fun main() {
    println(loadConfig("/etc/app"))
    // loadConfig(null) // throws
}

메서드와 함께 사용하는 안전 호출

안전 호출은 프로퍼티 접근뿐 아니라 모든 메서드에서도 작동합니다.

fun main() {
    val raw: String? = "  hello  "
    val cleaned = raw?.trim()?.uppercase() ?: ""
    println(cleaned) // HELLO
}

조건에서의 안전 호출

조건 내부에서 안전 호출을 사용할 수 있습니다. Elvis와 결합하면 기본 Boolean 값을 제공할 수 있습니다.

fun main() {
    val name: String? = "Alice"
    if (name?.startsWith("A") == true) {
        println("Starts with A")
    }
}

return과 함께 사용하는 Elvis

가드 절에는 Elvis와 return을 사용하십시오. 필수 값이 널이면 일찍 종료할 수 있습니다.

fun process(input: String?) {
    val safe = input ?: return
    println("processing $safe")
}
fun main() {
    process("abc")
    process(null) // returns silently
}

continue/break와 함께 사용하는 Elvis

반복문 내부에서 Elvis를 사용하면 널 처리를 간결하게 하면서 continue 또는 break로 단락 평가할 수 있습니다.

fun main() {
    val items: List<String?> = listOf("a", null, "b", null, "c")
    for (item in items) {
        val v = item ?: continue
        print("$v ")
    }
    println() // a b c
}

실전: 구성 조회

안전 호출과 Elvis를 결합하면 선택적 구성을 기본값과 함께 읽는 한 줄 코드를 만들 수 있습니다.

class Config(val timeoutMs: Int?, val host: String?)
fun main() {
    val cfg: Config? = Config(null, "prod.example.com")
    val timeout = cfg?.timeoutMs ?: 5000
    val host = cfg?.host ?: "localhost"
    println("$host @ $timeout ms")
}

빠른 확인

user?.email ?: "unknown"은 user가 널일 때 무엇으로 평가됩니까?

복습

안전 호출(?.)과 Elvis(?:)를 결합하여 간결하고 널에 안전한 코드를 작성하십시오. throw 또는 return과 함께 Elvis를 사용하면 데이터가 없을 때 일찍 종료하는 가드 절을 만들 수 있습니다.

자주 묻는 질문

“실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기” 강의는 무료인가요?

네 — “실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기”에서 뭘 배우나요?

안전 호출을 연결하고 엘비스 연산자로 대체 값을 제공해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 널 허용 타입과 ? 수정자
  2. 실제 코드에서 안전 호출 ?.와 엘비스 연산자 ?: 사용하기
  3. 널 허용 수신 객체와 함께 사용하는 let, also, run
  4. !! 연산자: 사용을 피해야 하는 경우와 이유
← Kotlin Academy(으)로 돌아가기