Skip to content

스마트 캐스팅

코틀린에서는 프로퍼티(변수)가 캐스팅 가능한 상황이라면 명시적으로 캐스팅하지 않아도 컴파일러가 캐스팅 해준다.

이를 스마트 캐스팅이라 한다.

필자의 경우 타입 <-> 타입 캐스팅보다는 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로 선언되어 있어야한다.

그리고 커스텀 접근자가 없는 경우에 스마트 캐스트를 사용할 수 있다.

당연한 말이지만 스마트캐스팅하기 위해서는 프로퍼티에 들어있는 값이 캐스팅 된 후에 유지가 되어야하는 조건이 필요하다.

Email: echo.youn@kakao.com