이를 스마트 캐스트라고 부르는 이유는 if의 첫 번째 분기에서 payload가 String 타입이라는 사실을 코틀린이 알고 자동으로 타입을 변환해 주기 때문이다. when 구조에서도 스마트 캐스트를 사용할 수 있다.
val result: Int = when (payload) { is String -> payload.length is Int -> payload else -> -1 }
as 연산자를 사용하면 일반적인 안전하지 않은(unsafe) 방식으로 타입 변환을 할 수 있다.
val result: String = payload as String
객체가 타입 변환이 가능한 올바른 타입이 아니라면 ClassCastException이 발생한다. 코틀린에서는 이런 타입 변환에 사용할 수 있는 as? 연산자를 제공한다.
val result: String? = payload as? String
타입 변환에 실패하면 예외가 발생하는 대신 null이 결과로 설정된다. 코틀린에서 더 안전한 프로그램을 작성하려면 널이 될 수 있는 타입을 사용하면 안 되는 상황에서는 as? 연산자도 사용하면 안 된다.