코틀린에서의 상속 관계에서 형 변환(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 |