Kotlin/포스팅

코틀린 상속 캐스팅

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

코틀린에서의 상속 관계에서 형 변환(casting)은 as 연산자를 사용하여 수행됩니다. 이는 부모 클래스 타입을 자식 클래스 타입으로 형 변환하거나, 인터페이스를 구현한 클래스 간에 형 변환하는 데 사용됩니다. 형 변환은 안전한 형 변환(as?)과 일반적인 형 변환(as)으로 나뉩니다.

 

1. 일반적인 형 변환 (as 연산자)

as 연산자를 사용하여 부모 클래스 타입을 자식 클래스 타입으로 형 변환할 수 있습니다. 이는 상속 관계에서 하위 클래스의 인스턴스를 상위 클래스 타입으로 선언된 변수에 할당할 때 유용합니다.

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() // Dog 클래스의 메서드 호출
}

주의: 만약 변환할 수 없는 경우(Animal이 Dog 타입이 아닌 경우) ClassCastException이 발생할 수 있습니다. 이를 방지하기 위해서는 안전한 형 변환(as?)을 사용할 수 있습니다.

 

2. 안전한 형 변환 (as? 연산자)

as? 연산자를 사용하여 안전한 형 변환을 수행할 수 있습니다. 이 연산자는 형 변환이 불가능한 경우 null을 반환합니다.

open class Animal

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

fun main() {
    val animal: Animal = Animal()
    val dog: Dog? = animal as? Dog // 안전한 형 변환

    dog?.bark() // Dog 클래스의 메서드 호출
}

안전한 형 변환을 사용하면 ClassCastException을 피할 수 있습니다. 대신에 형 변환이 불가능한 경우 null을 반환하므로, 이를 체크하여 적절한 대처를 할 수 있습니다.

 

3. 스마트 캐스트 (Smart Cast)

타입 검사 후 스마트 캐스트를 사용하면 자동으로 안전한 형 변환이 이루어집니다.

open class Animal

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

fun handleAnimal(animal: Animal) {
    if (animal is Dog) {
        animal.bark() // 스마트 캐스트로 인해 자동 변환
    }
}

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

상속 캐스팅은 주로 다형성과 함께 사용되며, 상속 구조에서 객체 간의 유연한 형 변환을 가능케 합니다. 하지만 주의해서 사용해야 하며, 가능한 한 안전한 형 변환을 사용하여 예외를 방지하는 것이 좋습니다.

 

With ChatGPT

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

코틀린 추상 클래스  (0) 2024.01.02
코틀린 공통 메서드  (0) 2024.01.02
코틀린 타입 검사  (0) 2024.01.02
코틀린 하위 클래스 초기화  (0) 2024.01.02
코틀린 하위 클래스 선언  (0) 2024.01.02