아이템 5: 예외를 활용해 코드에 제한을 걸어라 관련 내용에서 나온 용어 정리입니다.
스마트 캐스팅은 코틀린의 강력한 기능 중 하나로, 컴파일러가 특정 조건을 만족하면 자동으로 타입을 캐스팅해주는 기능이다.
이로 인해 타입 검사와 캐스팅을 수동으로 할 필요가 줄어들어 코드가 더 간결하고 안전해진다.
스마트 캐스팅은 다음과 같은 조건을 만족할 때 작동한다.
컴파일러가 스마트 캐스팅을 적용하면, 명시적인 캐스팅 없이도 변수를 안전하게 다른 타입으로 사용할 수 있다.
if 조건문과 스마트 캐스팅
가장 일반적인 예는 if 조건문을 통해 타입을 검사한 후 그 타입으로 안전하게 사용하는 경우
kotlin
fun printLength(obj: Any) {
if (obj is String) {
// obj는 자동으로 String 타입으로 스마트 캐스팅됨
println(obj.length)
} else {
println("obj is not a String")
}
}
when 조건문과 스마트 캐스팅
when 조건문에서도 동일하게 스마트 캐스팅이 적용된다.
fun handleObject(obj: Any) {
when (obj) {
is String -> println("String with length ${obj.length}")
is Int -> println("Integer value is $obj")
else -> println("Unknown type")
}
}
val과 스마트 캐스팅
변경되지 않는 변수 (val)에 대해서도 스마트 캐스팅이 가능하다.
fun processInput(input: Any) {
val value = input
if (value is Int) {
println("Integer: ${value * 2}")
}
}
var와 스마트 캐스팅
변경 가능한 변수 (var)는 스마트 캐스팅이 제한적이다.
컴파일러는 변수가 변경될 가능성이 있는 경우 스마트 캐스팅을 적용하지 않는다.
fun demoVarCasting(input: Any) {
var value = input
if (value is String) {
// value를 다른 값으로 변경할 수 있기 때문에 스마트 캐스팅되지 않음
println(value.length) // 컴파일 오류 발생
}
}
그러나 value 변수가 특정 블록 내에서 변경되지 않는다는 것을 확실히 할 수 있다면, 스마트 캐스팅이 적용될 수 있다.
스마트 캐스팅은 다음과 같은 경우에 제한된다:
스마트 캐스팅은 코틀린의 타입 검사와 캐스팅을 간결하고 안전하게 만드는 기능이다.
스마트 캐스팅을 통해 코드의 가독성과 안전성을 높일 수 있고,
if나 when 조건문에서 타입을 검사한 후 명시적인 캐스팅 없이도 그 타입으로 안전하게 사용할 수 있도록 해둔다. val 변수에 대해서는 더욱 강력하게 적용되며, var 변수에 대해서는 제한적으로 적용된다.