객체의 타입을 체크하기 위해 is 키워드를 사용한다.
fun main() {
println(check(10)) //Integer 타입
println(check("문자열")) //String 타입
println(check('a')) //Character 타입
println(check(true)) //Boolean 타입
println(check(1.1)) //그외
}
fun check(any: Any): String {
return when (any) {
is Int -> "Integer 타입"
is String -> "String 타입"
is Char -> "Character 타입"
is Boolean -> "Boolean 타입"
else -> "그외"
}
}
when문에서 is를 사용해도 되고, if 문안에서 사용가능 하다.
fun check(any: Any): String {
if (any is Int) {
return "Int"
}else if(any is String){
return "String"
}
return "그외"
}
이런식으로 해도 똑같다.
캐스팅
fun main() {
println(cast("안녕")) //안녕
println(cast(1)) //Exception
}
fun cast(any: Any): String {
val result = any as String
return result
}
as 키워드로 데이터형을 변환시켜줌
any의 타입이 확실할 때, 캐스팅해서 원래 타입에서 사용할 수 있는 함수들을 사용할 수 있음
as 에 ? 를 붙여 any가 String이 아니라면 Excenption을 발생시키지 않고 null을 반환함
?: (엘비스 오퍼레이션 사용가능)
스마트 캐스팅
fun main() {
println(smartCast(10)) //11
println(smartCast("안녕")) //2
println(smartCast(true)) //-1
}
fun smartCast(any: Any): Int {
return if (any is String) {
any.length
} else if (any is Int) {
any.inc()
} else {
-1
}
}
타입 체크를 해주고, 블록안에서 해당 타입으로 취급해서 원하는 값에 접근가능함