728x90

객체의 타입을 체크하기 위해 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
    }
}

타입 체크를 해주고, 블록안에서 해당 타입으로 취급해서 원하는 값에 접근가능함 

+ Recent posts