0Pricing
Kotlin Academy · 강의

스마트 캐스트

검사 후 자동으로 형 변환합니다

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

스마트 캐스트란 무엇인가요

값의 타입을 검사하면 Kotlin이 그 사실을 기억합니다. 검사한 블록 안에서는 해당 값을 자동으로 더 구체적인 타입으로 취급합니다.

이 기능을 스마트 캐스트라고 하며, 수동 캐스팅을 없애 줍니다.

is 이후의 스마트 캐스트

is 검사가 통과되면 캐스팅을 작성하지 않고도 해당 타입으로 값을 사용할 수 있습니다.

컴파일러가 대신 캐스팅을 삽입합니다.

fun describe(x: Any) {
    if (x is String) {
        println(x.length) // x is smart-cast to String
    }
}

fun main() {
    describe("hello")
}

널 검사 이후의 스마트 캐스트

스마트 캐스트는 널 가능성에도 적용됩니다. 값이 널이 아님을 확인하면 해당 값은 널이 아닌 값으로 취급됩니다.

fun length(text: String?): Int {
    if (text != null) {
        return text.length // smart-cast to non-null String
    }
    return 0
}

fun main() {
    println(length("abc"))
    println(length(null))
}

when에서의 스마트 캐스트

when 내부의 타입 검사도 각 분기에서 스마트 캐스트를 활성화합니다.

여러 가능한 타입을 처리할 때 사용하는 관용적인 방식입니다.

fun area(shape: Any): Double = when (shape) {
    is Int -> shape.toDouble()
    is String -> shape.length.toDouble()
    else -> 0.0
}

fun main() {
    println(area(5))
    println(area("hello"))
}

조기 반환을 사용한 스마트 캐스트

값이 널일 때 조기에 반환하면 컴파일러는 이후 그 값이 널이 아님을 알 수 있습니다.

함수의 나머지 부분에서는 값을 안전하게 사용할 수 있습니다.

fun process(text: String?) {
    if (text == null) return
    println(text.uppercase()) // smart-cast here
}

fun main() {
    process("data")
    process(null)
}

Elvis 반환을 사용한 스마트 캐스트

Elvis와 return을 함께 사용해도 나머지 코드에서 스마트 캐스트가 적용됩니다.

fun process(text: String?) {
    val safe = text ?: return
    println(safe.length) // safe is non-null
}

fun main() {
    process("hi")
    process(null)
}

조건 결합하기

스마트 캐스트는 &&를 사용해 결합한 조건의 논리를 따릅니다.

왼쪽에서 타입을 검사한 뒤에는 오른쪽에서 이미 더 구체적인 타입을 인식합니다.

fun check(x: Any) {
    if (x is String && x.length > 3) {
        println("long string")
    } else {
        println("other")
    }
}

fun main() {
    check("hello")
    check(2)
}

스마트 캐스트가 실패하는 경우

스마트 캐스트가 적용되려면 검사와 사용 사이에 값이 바뀌지 않는다는 보장이 필요합니다.

동시에 변경될 수 있는 가변 var에는 스마트 캐스트가 적용되지 않을 수 있습니다. 신뢰할 수 있는 스마트 캐스트를 위해 val을 사용하는 것이 좋습니다.

fun main() {
    val text: String? = "stable"
    if (text != null) {
        println(text.length) // val smart-casts cleanly
    }
}

지역 val이 가장 안전합니다

값을 지역 val에 복사하면 스마트 캐스트를 안정적으로 적용할 수 있습니다.

널 가능 속성을 다룰 때 흔히 사용하는 방식입니다.

class Box(val content: String?)

fun main() {
    val box = Box("item")
    val c = box.content
    if (c != null) {
        println(c.uppercase())
    }
}

스마트 캐스트와 명시적 캐스팅 비교

스마트 캐스트는 대부분의 명시적 as 캐스팅을 대신합니다. 타입이 확실히 확인된 곳에서만 적용되므로 더 안전합니다.

다음에는 명시적인 is와 as를 배우겠습니다.

fun main() {
    val x: Any = "text"
    if (x is String) {
        // no need for (x as String)
        println(x.reversed())
    }
}

한데 모아 보기

스마트 캐스트를 사용하면 컴파일러가 자동으로 타입 범위를 좁힐 수 있습니다:

  • is 검사 이후 → 해당 타입으로 캐스팅됩니다
  • 널 검사 이후 → 널이 아닌 타입으로 캐스팅됩니다
  • if, when, 조기 반환 이후에 작동합니다
  • val을 사용할 때 가장 안정적입니다
fun render(x: Any): String {
    if (x is Int) return "number " + x
    if (x is String) return "text " + x.uppercase()
    return "unknown"
}

fun main() {
    println(render(7))
    println(render("go"))
}

빠른 확인

스마트 캐스트에 대한 이해도를 확인해 보세요.

복습

스마트 캐스트에 대해 배웠습니다:

  • 타입 및 널 검사를 통해 타입 범위가 자동으로 좁혀집니다
  • if, when, 조기 반환 이후에 작동합니다
  • val을 사용하면 가장 안정적인 스마트 캐스트가 적용됩니다

다음에는 is와 as 연산자를 직접 살펴보겠습니다.

자주 묻는 질문

“스마트 캐스트” 강의는 무료인가요?

네 — “스마트 캐스트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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. 표현식으로서의 when
  2. 스마트 캐스트
  3. is와 as 연산자
  4. 모든 경우를 처리하는 when
← Kotlin Academy(으)로 돌아가기