더북(TheBook)

이를 스마트 캐스트라고 부르는 이유는 if의 첫 번째 분기에서 payloadString 타입이라는 사실을 코틀린이 알고 자동으로 타입을 변환해 주기 때문이다. 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? 연산자도 사용하면 안 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.