스마트 캐스트
검사 후 자동으로 형 변환합니다
스마트 캐스트은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.