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 |