728x90
반응형
1. 스마트 캐스팅
스마트 캐스팅이란? 특정 조건을 만족하는 경우, 컴파일러는 변수의 타입을 다른 타입으로 자동 캐스팅한다.
fun main() {
val number: Int?= null
val number2 = 1225
checkNull(number) // null이 들어왔습니다.
checkNull(number2) // 1225
}
fun checkNull(any: Any?) {
if(any == null) {
println("null이 들어왔습니다")
return
}
// any가 null 값이 아니라고 완벽히 추론이 가능하므로,
// any?.toString()이 아닌 any.toString()으로 호출이 가능
println(any.toString())
}
2. is 연산자
is 연산자로 참조 변수가 실제로 가리키고 있는 객체의 타입을 알아낼 수 있다.
자바의 instanceof에 해당하는 것!
// Person 클래스를 상속하는 Professor 클래스 선언
class Professor(name: String, age: Int): Person(name, age)
fun main() {
val person: Person = Student("토니스타크", 33, 20171225)
print("${person is Person} ")
print("${person is Student} ")
print("${person is Professor} ")
val person2: Person = Professor("짱구", 5)
print("${person2 is Person} ")
print("${person2 is Student} ")
print("${person2 is Professor}")
}
[결과]
true true false true false true
is 연산자는 when에서 다음과 같이 사용할 수 있다.
val person3: Person = Student("철수", 5, 121212)
when(person3) {
is Person -> {println("Person 타입의 ${person3.name} 입니다.")}
is Student -> {println("Student 타입의 ${person3.name} 입니다.")}
is Professor -> {println("Professor 타입의 ${person3.name} 입니다.")}
}
[결과]
Person 타입의 철수 입니다.
3. as 연산자와 다운캐스팅
다운캐스팅이란? 업캐스팅과는 반대로 슈퍼클래스 타입을 서브클래스 타입으로 받는 것을 뜻한다.
다운캐스팅을 위해서는 as연산자를 사용한다.
왼쪽 피연산자(참조 변수)의 타입을 오른쪽 피연산자(타입)으로 캐스팅
fun main() {
val person: Person = Student("John", 32, 20171218)
val person2: Person = Person("Jack", 29)
val person4: Person = Person("test", 29)
var person5: Person?= person4 as? Student
println(person5)
// person 참조 변수가 가리키고 있는 객체는 Student 타입이므로 캐스팅 OK
// 즉, Person -> Student로 다운캐스팅
var person3: Student = person as Student
println(person3)
// person2 참조 변수가 가리키고 있는 객체는 Person 타입이므로 예외가 발생
// Person -> Student로 캐스팅 X
person3 = person2 as Student
println(person3)
}
캐스팅에 실패했을 때 예외가 발생하는 것을 막고싶다면 as? 연산자를 사용하면 된다.
as? 연산자는 캐스팅에 실패하면 null을 돌려준다.
ex) person2 as? Student 표현식의 타입은 Studnet?이고, 캐스팅에 실패히면 null 성공하면 Student 타입으로 변환된 객체를 반환
728x90
반응형
'TIL > Kotlin' 카테고리의 다른 글
[TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체 (0) | 2023.05.17 |
---|---|
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티 (0) | 2023.05.14 |
[TIL/Kotlin] 코틀린 중급문법_Nothing타입, Nullable, ?. 연산자, !! 연산자, ?: 연산자 (0) | 2023.05.14 |
[TIL/Kotlin] 코틀린 중급문법_예외 처리, 예외 던지기 (0) | 2023.05.14 |
[TIL/Kotiln] 코틀린 중급문법_생성자와 초기화(init)블록, 보조생성자, Getter/Setter, 연산자 오버로딩, 번호붙은접근연산자, 호출연산자, in연산자, 멤버함수의 중위표기법, 상속, 업캐스팅, 오버라.. (0) | 2023.05.06 |