스마트 캐스팅
코틀린에서는 프로퍼티(변수)가 캐스팅 가능한 상황이라면 명시적으로 캐스팅하지 않아도 컴파일러가 캐스팅 해준다.
이를 스마트 캐스팅
이라 한다.
필자의 경우 타입 <-> 타입 캐스팅보다는 nullable -> not null로의 캐스팅을 더 많이 경험하는것 같다.
kotlin
fun whatissmartcasting(e: Any?) { // nullable Any 타입이다
if(e == null) { // e가 null이라면 Early return한다.
return
}
// 위에서 null 여부를 판단했기 때문에 아래에서 e를 사용할때에는 not null 타입으로 사용할 수 있다.
when (e) {
is Int ->
e = e + e // e는 Int 타입으로 스마트 캐스팅 됐다
is String ->
println(e) // e는 String 타입으로 스마트 캐스팅 됐다.
else ->
return
}
}
스마트 캐스팅 되는 조건
프로퍼티가 스마트 캐스팅이 되기 위해서는 몇가지 조건이 필요하다.
우선 프로퍼티가 당연하게도 final
이여야 한다. 코틀린에서는 val
로 선언되어 있어야한다.
그리고 커스텀 접근자가 없는 경우에 스마트 캐스트를 사용할 수 있다.
당연한 말이지만 스마트캐스팅하기 위해서는 프로퍼티에 들어있는 값이 캐스팅 된 후에 유지가 되어야하는 조건이 필요하다.