만약 어떤 변수의 값이 실수일 때도 있고, 정수일 때도 있다면 어떻게 해야할까?
매번 자료형을 변경 하기는 조금은 불편할 수 있다.
이를 쉽게 도와주는 기능이 있다.
코틀린의 경우 'is'를 사용하여 변수의 타입을 검사한다.
자바의 'instanceof'와 비슷하게 볼 수 있지만, 'instanceof'는 타입을 검사 후 변수 타입을 캐스팅 해주어야 한다.
하지만 'is'는 타입 검사 후 컴파일러가 자동으로 형변환 (캐스팅)을 해준다. (대박쓰~)
이 기능을 스마트 캐스트 라고 한다.
위의 예시처럼 저장되는 값에 따라서 자료형을 변환하려면 'Number'를 사용하면 된다.
var x: Number = 10.16 // x는 float형이 된다.
x = 12 // x를 Int형으로 스마트 캐스트
x= 80L // x를 Long형으로 스마트 캐스트
Number형인 x에 10.16을 저장하면서, x는 컴파일러에 의해 float형이 된다.
그 후, x에 담긴 값에 따라 자료형은 계속 변한다.
코틀린에는 Int, Double, Float등 다양한 자료형이 있다.
이 자료형들을 포함, 어떠한 자료형이라도 될 수 있는 최상위 클래스 'Any'가 있다.
Any를 사용하여 변수를 선언한 후, 'is'를 사용하면 어떻게 될까?
var a:Any //Any형 변수 a선언
a = "smartcast"
if(a is String) a="hello" //a가 String형으로 스마트캐스트
a는 검사한 자료형으로 스마트 캐스트 되어진다.
즉, String형이 된다.
as를 사용하여 스마트캐스트를 할 수도 있다.
단, 주의할 점은 형변환이 되지 않으면 예외를 발생시킨다.
var x : String = y as String
y가 null이 아니라면 String으로 형변환이 되고, 이 값이 x에 대입된다.
y가 null이라면 예외를 발생시킨다.
따라서, 예외발생으로 인한 오류를 방지하기 위해선 지난 포스팅의 '?'를 사용해주어야 한다.
var x: String = y as? String
이렇게 '?'를 통해서 null일 가능성이 있는지를 검사한다.