본문 바로가기

Study/Kotlin Study

[Kotlin] Smart Cast

+ 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다.

 

스마트 캐스트 (Smart Cast)란 코틀린의 특징 중 하나로 구체적으로 명시되지 않은 변수의 자료형을 값을 통해 자동으로 추론하여 해당 타입으로 자동 변환한다.

 

fun main() {
    var smart: Number = 12.2 // Float형으로 스마트 캐스트
    println("$smart")

    smart = 12 // Int형으로 스마트 캐스트
    println("$smart")

    smart = 120L // Long형으로 스마트 캐스트
    println("$smart")

    smart = 12.0f // Float형으로 스마트 캐스트
    println("$smart")
}

Number 클래스는 숫자를 저장하기 위한 특수한 자료형으로 코틀린 클래스 계층 구조에서 모든 숫자 타입의 상위 클래스이다.

따라서 Number형 변수는 값에 따라 모든 숫자 자료형으로 자동 변환(스마트 캐스트)된다.

 

fun main() {
    val num = 256 // Int형으로 스마트 캐스트

    if (num is Int) { // num이 Int형이라면
        print(num)
    }
    else if (num !is Int){ // num이 Int형이 아니라면
        print("Not a Int")
    }
}

is, !is 키워드를 조건문과 함께 사용하여 자료형을 검사할 수 있다.


Any 클래스는  코틀린의 모든 클래스의 최상위 클래스이다.

모든 클래스(Int, String 등)가 Any 클래스를 상속하므로 모든 객체를 나타낼 수 있다. 

따라서 Any 형 변수는 언제든 필요한 자료형으로 자동 변환(스마트 캐스트)된다.

fun main() {
    checkArg("Hello") // String 변수를 인자로 전달
    checkArg(5) // Int 변수를 인자로 전달
}

fun checkArg(x: Any) { // 인자 x를 Any형으로 받고
    if (x is String) { // x가 String형이라면
        println("x is String: $x")
    }
    if (x is Int) { // x가 Int형이라면
        println("x is Int: $x")
    }
}

위 코드처럼 다양한 형의 변수를 인자로 받고 그에 따라 다르게 작동하는 함수를 작성할 수 있다.