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

Kotlin] 20. is

by 김마리님 2020. 12. 9.

자바에는 instanceOf 함수가 있듯, 코틀린에는 is가 있다. 이것은 객체의 타입의 일치여부를 Boolean 타입으로 반환한다.

 

앞서 예시에서 Student는 Person을 상속했었다.

이제 예시를 보자.

 

package isExample

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

class Professor(name : String, age : Int) : Person(name, age)

fun main(args : Array<String>) {
    val person : Person = Student("Rose", 21, 20201209)
    println("${person is Person}")
    println("${person is Student}")
    println("${person is Professor}")

    println("\n")
    
    val person2 : Person = Professor("lily", 42)
    println("${person2 is Person}")
    println("${person2 is Student}")
    println("${person2 is Professor}")
}

 

여기서 Professor은 Person을 상속한다.

즉, Professor은 Person이기도 하고, Professor이기도 하다, 마찬가지로 Student는 Person이기도 하고 Student이기도 하다.

 

이제 메인 함수를 보자.

처음 person은 Student 객체이다. 즉, 사람이며 학생이다. 그러니 Person과 Student는 true고, Professor은 false이다.

반대로 person2는 Professor 객체이다. 즉, 교수이며, 사람이기 때문에 Preson과 Professor은 true 이고 Student는 false가 된다.

 

결과 :

 

true
true
false

true
false
true

 


is를 when이랑도 사용 가능한데

package isExample

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

class Professor(name : String, age : Int) : Person(name, age)

fun main(args : Array<String>) {
    val person : Person = Student("Rose", 21, 20201209)

    when(person){
        is Person -> { println("사람이당") }
        is Student -> { println("학생이당") }
        is Professor -> { println("교수당") }
    }

}

한 가지 주의할 점은 자바의 switch 문과 다르게 코틀린의 when은 하나의 조건이 맞으면 그 조건을 실행하고 함수가 종료되기 때문에 한가지 타입밖에 찾지 못한다는 점이다.

 

결과 :

 

사람이당

반응형

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

Kotlin] 22. 확장  (0) 2020.12.10
Kotlin] 21. 다운캐스팅  (0) 2020.12.09
Kotlin] 19. Nullable?  (0) 2020.12.09
Kotlin] 18. Nothing  (0) 2020.12.09
Kotlin] 17. 오버라이딩  (0) 2020.12.09