안드로이드 앱(Kotlin|Java)/[2025~] 안드로이드 앱
Part0_Ch01_09 타입체크와 캐스팅
heylo
2025. 1. 24. 17:46
1) 타입체킹 (is)
타입 체크 : 오브젝트나 인스턴스의 type을 확인하는 것 형식 : <object> is <type>
// 타입 체크: 오브젝트나 인스턴스의 타입을 확인하는 것
fun main() {
// object is type
println(check("안녕"))
println(check(3))
println(check(true))
}
fun check( a: Any ) : String{
return when (a) {
is String -> {
"문자열"
}
is Int -> {
"숫자"
}
else -> {
"몰라요"
}
}
}
2) 캐스팅 ( as )
fun main() {
cast("안녕")
cast(10) // class cast exception 발생
}
// 캐스팅
fun cast(a : Any) {
val result = a as String // a 를 String 으로 받겠다
println(result)
}
2-1) Class Cast Exception 처리 (1)
Class Cast Exception 을 잡아주려면?
val result = a as String
위 코드 한 줄을, 아래와 같이 변경
엘비스 연산자 (?) 를 사용함으로써 a 를 String 으로 받을 수 없을 때, a 값을 자동으로 null 로 만들어준다.
val result = a as? String
fun main() {
cast("안녕")
cast(10)
}
// 캐스팅
fun cast(a : Any) {
val result = a as? String
println(result)
}
as 를 통해서 checking 을 하여 String으로 변환이 되어서 나오거나 null 값을 반환
2-2) Class Cast Exception 처리 (2)
fun main() {
cast("안녕")
cast(10)
}
// 캐스팅
fun cast(a : Any) {
val result = (a as? String) ?: "캐스팅 실패"
println(result)
}
3) 스마트 캐스팅
a 가 String 임을 이미 체킹했으면
String 관련 함수 캐스팅 없이 바로 사용 가능
fun main() {
smartcast("안녕")
smartcast(10)
smartcast(true)
}
// 스마트 캐스트
fun smartcast(a: Any) {
var result = if (a is String){ // 이미 a 가 String인지 체킹했으므로
a.length // 캐스팅 없이, length 값을 사용 가능
} else if ( a is Int){
a.dec() // 1 감소
}else {
-1
}
println(result)
}