kotlin 자료형에서 암묵적인 형변환을 지원하지 않으므로 명시적 형변환을 써야한다고 말했다. 하지만 is 체크가 있는 경우
컴파일러가 형변환자를 삽입하므로 굳이 개발자가 형변환자를 삽입할 필요가 없다.
fun demo(x: Any) {
if (x is String) {
// val str = x as String
// print(str.length)
print(x.length) // Smart cast 로 위의 형변환 작업이 필요없음
}
}
위 코드에서 x 는 Any 타입으로 어떤 자료형도 올 수 있다. 따라서 if 이하의 x.length 를 실행하려면 val str = x as String
이런 명시적 형변환이 있어야 할 것 같지만, 컴파일러는 이미 if (x is String)
구문에서 x 가 String 형이라는 것을 확인 했으므로 굳이 개바랒가 명시적으로 형변환을 해줄 필요없다는 것이다.