[kotlin] 코틀린에서의 클래스 타입 변환 함수

코틀린은 강력한 타입 시스템을 가지고 있으며, 다른 클래스 간에 타입 변환이 필요한 경우가 종종 있습니다. 이때 사용할 수 있는 여러 가지 클래스 타입 변환 함수들을 알아보겠습니다.

1. as 키워드를 사용한 클래스 타입 변환

코틀린에서는 as 키워드를 사용하여 클래스 간의 타입을 변환할 수 있습니다. 이 키워드를 사용하는 가장 간단한 방법은 서브타입에서 슈퍼타입으로의 변환입니다.

val subClass: SubClass = SubClass()
val superClass: SuperClass = subClass as SuperClass

이 코드에서 subClassSubClass의 인스턴스이고, superClassSuperClass의 인스턴스입니다. as 키워드를 사용하여 subClasssuperClass로 타입 변환하였습니다.

하지만 이 방법은 런타임에 타입 변환을 수행하므로, 변환이 불가능한 경우 ClassCastException이 발생할 수 있습니다. 따라서 클래스 간의 상속 관계를 확인한 후에 타입 변환을 수행해야 합니다.

2. is 키워드를 사용한 클래스 타입 확인 및 변환

타입 변환이 가능한지 확인한 후에 안전하게 타입 변환을 수행하려면 is 키워드를 사용할 수 있습니다. 이 키워드를 사용하여 인스턴스의 타입을 확인한 후에 필요한 타입으로 변환합니다.

val anyClass: Any = SubClass()
if (anyClass is SubClass) {
    val subClass: SubClass = anyClass as SubClass
    // 변환된 subClass를 사용
}

이 코드에서 anyClassAny 타입의 변수이지만, is 키워드를 사용하여 해당 변수가 SubClass의 인스턴스인지 확인한 후에 타입 변환을 수행합니다. 타입 확인 후에는 as 키워드를 사용하여 타입을 변환할 수 있습니다.

3. 안전한 타입 변환 함수 as?

as는 런타임에 타입 변환을 수행하므로 컴파일러의 타입 검사를 통과할 수 없는 경우 ClassCastException이 발생합니다. 하지만, 이를 방지하기 위해 as? 키워드를 사용할 수 있습니다.

val anyClass: Any = "Hello"
val string: String? = anyClass as? String

이 코드에서 anyClassAny 타입의 변수이고 값을 "Hello"로 설정했습니다. as? 키워드를 사용하여 anyClassString 타입으로 변환하였습니다. 만약 변환이 불가능하다면 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 공식 문서를 확인해보세요!