References: Do it! 코틀린 프로그래밍

자료형의 스마트 캐스트와 Any및 as에 대해 알아봅니다.

 

 

1. 스마트 캐스트

 

스마트 캐스트란 어떤 값이 정수일수도 있고 실수일수도 있는 상황에서 컴파일러가 자동으로 형을 변환해주는 기능을 말합니다.

말한 예시대로 정수와 실수 즉 숫자형에 대한 스마트 캐스트가 적용되는 자료형은 Number가 있습니다.

var num: Number = 11.1

위의 코드에서 num은 스마트 캐스트에 의해 자동으로 Float형이 됩니다.

 

 

2. Any

 

자료형을 결정하지 않은채 변수를 선언하고 싶을땐 Any형을 사용하면 됩니다.

val value: Any
value = "Hello kotlin!"
if(value is String) { println(value) }

value를 선언 할 때 Any라는 타입으로 변수가 선언됩니다.

이후 "Hello kotlin!"이 할당된 후(아직 자료형은 Any로 남아있습니다) is를 통해 형을 검사할때 자동으로 String으로 스마트 캐스팅 되어 조건문을 수행하게 됩니다.

 

Any는 모든 자료형 클래스의 최상단에 위치합니다. 다시말하면 코틀린의 모든 클래스는 Any라는 슈퍼 클래스를 가집니다.

이로인해 Any를 사용한 자료형은 묵시적 변환에 의해 어떤 자료형으로든 변경될 수 있습니다. 따라서 아래와 같이 구분할 수도 있습니다.

fun checkArgType(input: Any)
    if(input is String) { println("input value is String") }
    if(input is Int) { println("input value is Int)}
}

 

 

3. as

 

as를 사용해 스마트 캐스트를 수행 할 수도 있습니다. 

단, as는 형변환이 가능하지 않으면 예외를 발생시킵니다.

val str2: String = str1 as String

위의 코드는 str1이 null이 아니면 String으로 형변환 되어 str2에 할당하는 코드입니다.

만약 str1이 null이면 형변환이 불가능하므로 예외를 발생합니다. 따라서 위의 코드는 다음과 같이 바꿔 수행하는게 더 안전합니다.

val str2: String? = str1 as? String
반응형

+ Recent posts