숫자 타입의 값을 형변환 하는 방법을 살펴보도록 하겠습니다.
자바 예제와 비교하면서 코틀린과 자바는 어떠한 차이가 있는지도 확인하도록 하겠습니다.
우선은 자바 샘플부터 보도록 하겠습니다.
아래의 자바 코드는 문제없이 형변환이 됩니다.
// Java
int x = 42;
double y = x; // OK
하지만 코틀린에서는 컴파일 에러가 발생합니다.
// Kotlin
val x: Int = 42
val y: Double = x // 컴파일 에러
일반적으로 A라는 타입의 값을 B라는 타입의 변수에 대입하려면 A는 B의 서브타입이어야 합니다.
코틀린에서 Int는 Double의 서브 타입이 아닙니다.
서로 관계가 없는 타입이기 때문에 암묵적으로 형변환이 이뤄지지 않는 것입니다.
즉, 코틀린에서는 Int 타입의 값을 Double 타입의 변수에 대입하는 경우, 코틀린이 암묵적으로 형변환을 해주지 않고 있기 때문에 컴파일 에러가 발생하고 있습니다.
코틀린에서 형변환을 할 경우 명시적으로 함수를 작성해줘야 합니다.
// Kotlin
val x: Int = 42
val y: Double = x.toDouble() // OK
toDouble 함수를 사용하여 형변환을 하였습니다.
그리고 Double 타입에서 Int 타입으로 형변환을 할 경우, 자바에서는 캐스팅을 사용하여 명시적으로 소스를 작성하지만 코틀린 에서는 캐스팅이 아닌 함수로 형변환을 해야합니다.
이유는 Int와 Double 관계가 없는 타입이기 때문입니다.
// Java
double x = 42.0;
int y = (int)x; // OK
// Kotlin
val x: Double = 42.0
val y: Int = x as Int // ClassCastException
// Kotlin
val x: Double = 42.0
val y: Int = x.toInt() // OK
자바와 코틀린의 형변환을 하기 위해서 다르다는 것을 알게 되었습니다.
타입과 타입 간의 관계가 자바와 코틀린은 다르기 때문에 주의해서 사용해야 합니다.
댓글