Kotlin/포스팅

코틀린 타입 검사

짜집퍼박사(짜박) 2024. 1. 2. 11:16

코틀린에서는 타입 검사(Type Checking)를 통해 객체가 특정 타입인지 확인할 수 있습니다. 이는 is 연산자를 사용하여 객체가 주어진 타입이거나 해당 타입의 하위 클래스인지를 확인하는 것을 의미합니다. 또한, 스마트 캐스트(Smart Cast)를 활용하여 타입 변환을 자동으로 수행할 수 있습니다.

 

1. is 연산자를 이용한 타입 검사

open class Animal

class Dog : Animal()

fun main() {
    val animal: Animal = Dog()

    if (animal is Dog) {
        println("It's a Dog!")
    } else {
        println("It's not a Dog.")
    }
}

위의 예제에서 animal is Dog는 animal이 Dog 타입인지를 검사하며, 만약 Dog 타입이면 if 블록이 실행됩니다.

 

2. 스마트 캐스트를 이용한 타입 변환

is 연산자를 사용한 타입 검사 이후에는 스마트 캐스트를 활용하여 해당 타입으로의 자동 변환이 가능합니다.

open class Animal {
    fun makeSound() {
        println("Animal makes a sound")
    }
}

class Dog : Animal() {
    fun bark() {
        println("Dog barks")
    }
}

fun handleAnimal(animal: Animal) {
    if (animal is Dog) {
        animal.bark() // 스마트 캐스트로 인해 자동 변환
    }
    animal.makeSound() // Animal 클래스의 메서드 호출
}

위의 예제에서 animal is Dog 이후에는 animal 변수가 Dog 타입으로 스마트 캐스트되어 bark() 메서드를 호출할 수 있습니다.

 

3. as 키워드를 이용한 타입 캐스팅

as 키워드를 사용하여 명시적으로 타입을 캐스팅할 수 있습니다. 이는 스마트 캐스트를 사용할 수 없는 경우에 유용합니다.

open class Animal

class Dog : Animal() {
    fun bark() {
        println("Dog barks")
    }
}

fun main() {
    val animal: Animal = Dog()

    if (animal is Dog) {
        (animal as Dog).bark() // 명시적인 타입 캐스팅
    }
}

참고: as를 사용한 명시적인 캐스팅은 타입이 맞지 않을 경우 ClassCastException을 발생시킬 수 있으므로 주의가 필요합니다. is 연산자나 스마트 캐스트는 안전한 타입 검사를 제공합니다.

 

4. !is 연산자를 이용한 부정적인 타입 검사

!is 연산자를 사용하여 객체가 특정 타입이 아닌지를 검사할 수 있습니다.

open class Animal

class Dog : Animal()

fun main() {
    val animal: Animal = Dog()

    if (animal !is Dog) {
        println("It's not a Dog.")
    } else {
        println("It's a Dog!")
    }
}

 

5. as? 연산자를 이용한 안전한 타입 캐스팅

as? 연산자는 안전한 형 변환을 수행하며, 타입이 맞지 않을 경우 null을 반환합니다.

open class Animal

class Dog : Animal() {
    fun bark() {
        println("Dog barks")
    }
}

fun main() {
    val animal: Animal = Dog()

    val dog: Dog? = animal as? Dog
    dog?.bark()
}

안전한 형 변환을 위해 as?를 사용하면 예외 발생을 피할 수 있습니다.

타입 검사 및 형 변환은 다형성과 함께 객체 지향 프로그래밍에서 중요한 개념이며, 코틀린은 이를 강력하게 지원합니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 공통 메서드  (0) 2024.01.02
코틀린 상속 캐스팅  (0) 2024.01.02
코틀린 하위 클래스 초기화  (0) 2024.01.02
코틀린 하위 클래스 선언  (0) 2024.01.02
코틀린 상속  (0) 2024.01.02