코틀린은 강력한 타입 시스템을 가지고 있으며, 다른 클래스 간에 타입 변환이 필요한 경우가 종종 있습니다. 이때 사용할 수 있는 여러 가지 클래스 타입 변환 함수들을 알아보겠습니다.
1. as
키워드를 사용한 클래스 타입 변환
코틀린에서는 as
키워드를 사용하여 클래스 간의 타입을 변환할 수 있습니다. 이 키워드를 사용하는 가장 간단한 방법은 서브타입에서 슈퍼타입으로의 변환입니다.
val subClass: SubClass = SubClass()
val superClass: SuperClass = subClass as SuperClass
이 코드에서 subClass
는 SubClass
의 인스턴스이고, superClass
는 SuperClass
의 인스턴스입니다. as
키워드를 사용하여 subClass
를 superClass
로 타입 변환하였습니다.
하지만 이 방법은 런타임에 타입 변환을 수행하므로, 변환이 불가능한 경우 ClassCastException
이 발생할 수 있습니다. 따라서 클래스 간의 상속 관계를 확인한 후에 타입 변환을 수행해야 합니다.
2. is
키워드를 사용한 클래스 타입 확인 및 변환
타입 변환이 가능한지 확인한 후에 안전하게 타입 변환을 수행하려면 is
키워드를 사용할 수 있습니다. 이 키워드를 사용하여 인스턴스의 타입을 확인한 후에 필요한 타입으로 변환합니다.
val anyClass: Any = SubClass()
if (anyClass is SubClass) {
val subClass: SubClass = anyClass as SubClass
// 변환된 subClass를 사용
}
이 코드에서 anyClass
는 Any
타입의 변수이지만, is
키워드를 사용하여 해당 변수가 SubClass
의 인스턴스인지 확인한 후에 타입 변환을 수행합니다. 타입 확인 후에는 as
키워드를 사용하여 타입을 변환할 수 있습니다.
3. 안전한 타입 변환 함수 as?
as
는 런타임에 타입 변환을 수행하므로 컴파일러의 타입 검사를 통과할 수 없는 경우 ClassCastException
이 발생합니다. 하지만, 이를 방지하기 위해 as?
키워드를 사용할 수 있습니다.
val anyClass: Any = "Hello"
val string: String? = anyClass as? String
이 코드에서 anyClass
는 Any
타입의 변수이고 값을 "Hello"
로 설정했습니다. as?
키워드를 사용하여 anyClass
를 String
타입으로 변환하였습니다. 만약 변환이 불가능하다면 null
을 반환하게 됩니다.
4. to
키워드를 사용한 타입 변환
코틀린에서는 몇 가지 자동 변환 함수를 제공합니다. 예를 들어, toByte()
, toShort()
, toInt()
등의 함수를 사용하여 타입을 변환할 수 있습니다.
val intVal: Int = 42
val byteVal: Byte = intVal.toByte()
이 코드에서 intVal
변수를 byteVal
변수로 변환하였습니다. toByte()
함수를 호출하여 Int
타입을 Byte
타입으로 변경할 수 있습니다.
마무리
코틀린에서는 다양한 방법으로 클래스 간의 타입 변환을 수행할 수 있습니다. as
키워드를 사용하여 강제 타입 변환을 할 수도 있고, is
키워드를 사용하여 안전하게 타입을 확인한 후에 변환을 수행할 수도 있습니다. 또한, as?
키워드를 사용하여 안전한 타입 변환을 수행할 수도 있습니다. 자동 타입 변환 함수들인 toByte()
, toShort()
, toInt()
등도 쉽게 사용할 수 있습니다.
더 자세한 내용은 Kotlin 공식 문서를 확인해보세요!