Koltin에서 형변환은 직관적이다. 보통 to~() 방식으로 메소드명이 붙어있다. 자주 사용하는 메소드에는 toInt(), toLong(), toString() 등이 있다.
String to Number
fun main() {
val i = "123"
println(i.toInt()) // 123
println(i.toLong()) // 123
}
String을 숫자형으로 형변환 한 결과이다.
Chat to Number
그런데 Chat 타입을 변환해보면 얘기가 달라진다.
형변환 실패
fun main() {
val i = '1'
println(i.toInt()) // 49
println(i.toLong()) // 49
}
너무나도 당연히 1이 나올줄 알았으나 아니었다...
내부 코드를 확인해보니 1.5부터는 심지어 deprecated 된다고 나온다 ㅎㅎ
@Deprecated("Conversion of Char to Number is deprecated. Use Char.code property instead.", ReplaceWith("this.code"))
@DeprecatedSinceKotlin(warningSince = "1.5")
public fun toInt(): Int
내부 코드를 따라서 아래의 코드로 바꿔보았는데도 동일한 결과가 실행된다.
fun main() {
val i = '1'
println(i.code) // 49
}
char를 바로 숫자형으로 형변환 하는 경우에는 우리가 기대한 바와는 달리 아스키코드를 반환하기 때문에 이런 결과가 나온다.
형변환 성공
원래는 Character.getNumericValue('1') 을 사용했지만, 1.5버젼 이후로는 digitToInt() 를 사용하여 원하는 값을 얻을 수 있다.
fun main() {
val i = '1'
// v1.5.0 이상
println(i.digitToInt()) // 1
// v1.5.0 미만
println(Character.getNumericValue(i)) // 1
}