본문 바로가기

Kotlin

Kotlin - 타입체크와 형 변환

https://kotlinlang.org/docs/typecasts.html

is, !is 연산자

오븍제트가 특정 타입인지 아닌지를 확인할때 사용된다.

if (obj is String) {
    print(obj.length)
}

if (obj !is String) {
    print("Not a String")
} else {
    print(obj.length)
}

 

Smart 형변환

보통의 경우 Kotlin 컴파일러가 is 연산자를 확인하고 해당 타입으로 자동 형 변환을 하기 때문에 명시적인 형 변환을 할 필요는 없다. 컴파일러는 !is 체크 이후 return 문이 온다면 안전하다는 것을 알 만큼 똑똑하다.

fun demo(x: Any) {
    if (x is String) {
        print(x.length) // x is automatically cast
    }
}

fun demo2(x: Any) {
    if (x !is String) return
    print(x.length)
}

&&, || 연산자의 좌변에서 타입체크를 하는 경우

// x is automatically cast to String on the right-hand side of '||' 
// 왼쪽 식이 거짓 이라면(|| 이기 때문에) x는 String 타입이라는 뜻이므로...
if (x !is String || x.length == 0) return

// x is automatically cast to String on the right-hand side of '&&' 
// 왼쪽 식이 참 이라면(&& 이기 때문에)
if (x is String && x.length > 0) {
    print(x.length) // x is automatically cast to String
}

smart 형 변환은 when 표현식이나 while 문에서도 적용 된다.

when (x) {
    is Int -> print(x + 1)
    is String -> print(x.length + 1)
    is IntArray -> print(x.sum())
}

smart 형 변환은 변수가 체크하는 시점과 사용하는 시점에 그 값이 변경되지 않는다고 보장될때 동작한다.

 

안전하지 않은(unsafe) 형 변환

형 변환이 불가능 한 경우 예외가 발생한다. 이를 unsafe라고 한다. unsafe 형 변환은 as 를 통해서 할 수 있다.

보통의 경우 null 값도 형 변환이 될 수 있으므로 nullable로 형 변환 하는 것이 좋다.

val x: String = y as String
// y가 null 인 경우 예외가 발생하므로 아래처럼 nullable로 형 변환한다.
val x: String? = y as String?

 

안전한(nullable) 형 변환

위의 null 값 형변환을 안전하게 처리 하기 위해서 안전한 형 변환 연산자(as?)를 사요한다.

val x: String? = y as? String

 

반응형

'Kotlin' 카테고리의 다른 글

Kotlin - 반복문(for, while)  (0) 2024.01.10
Kotlin - 조건문  (2) 2024.01.07
Kotlin - 데이터 타입 (배열)  (0) 2024.01.01
Kotlin - 데이터 타입 (Character, String)  (0) 2023.12.31
Kotlin - 데이터 타입 (숫자, Boolean)  (2) 2023.12.30