본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 21. 다운캐스팅

by 김마리님 2020. 12. 9.

자바에서의 다운 캐스팅은 객체 앞에 (다운캐스팅 될 서브 클래스 타입)을 붙이면 다운 캐스팅이 됐다. 그럼 코틀린은?

코틀린은 as를 붙인다.

슈퍼클래스 as 서브클래스

로 다운 캐스팅을 한다.

 

예시를 보자.

package downCastingEx

import `object`.Person
import `object`.Student

fun main() {
    val person : Person = Student("John", 21, 20201209)
    val person2 : Person = Person("Kahn", 21)

    var person3 : Student = person as Student
    
}

현재 Student는 Person의 서브 클래스 형태이다.

Person3는 Person 성격을 가지는 person을 Student로 다운 캐스팅을 한다.

 

그럼 person2를 Student로 다운 캐스팅을 시도하면?

person은 Student 타입이라 다운 캐스팅이 가능했지만, person2의 경우 Person 타입이기 때문에 Student로 다운 캐스팅이 불가능하다. 그래서 ClassCastException이 발생한다.

이를 방지하기 위해서 as 뒤에 ?를 붙여주면

var person4 : Student = person2 as? Student

캐스팅이 불가능하면 null을, 캐스팅이 가능하면 캐스팅된 값을 반환한다.

반응형

'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글

Kotlin] 23. 객체 선언(Singleton)  (0) 2020.12.10
Kotlin] 22. 확장  (0) 2020.12.10
Kotlin] 20. is  (0) 2020.12.09
Kotlin] 19. Nullable?  (0) 2020.12.09
Kotlin] 18. Nothing  (0) 2020.12.09