Char을 Int로 변환할 때 많은 실수가 생기는 이유
Kotlin은 하나의 자료형을 다른 자료형을 변환할 때 to자료형 확장함수를 제공한다. 예를 들어 String을 Int로 변환할 때는 String.toInt()를 사용하면 된다. 하지만 Char은 기본적으로 UTF-16으로 인코딩 되고 숫자로 변환될 때 해당 코드에 해당하는 숫자로 디코딩된다. 8비트 이하의 값들에 대해서는 ASCII를 따른다.
이 때문에 Char.toInt() 를 사용해 Int를 Char로 변환을 하게 되면 예상치 못한 결과가 나온다. 한 번 '1'을 toInt()를 사용해 변환해 보도록 하자.
fun main() {
val char = '1'
println(char.toInt()) // 49출력
}
위와 같이 '1'.toInt()는 49가 됨을 알 수 있다. 이유는 바로 ASCII 코드에서 49번이 1에 해당하기 때문이다.
사람들이 많이 실수하니까 Kotlin은 이를 Deprecated 시켜버리고, ASCII 코드를 표현하는 char.code를 대신 사용하도록 유도한다.
![](https://blog.kakaocdn.net/dn/t8eMh/btsgEepfFbQ/37OhyBeHBdcXPL9igXNnX0/img.png)
하지만, Char을 Int로 변환하는 것은 가끔 필요하다. 이때 어떻게 해야 할까?
Char을 Int로 변환하기
Char을 Int로 변환하기 위해서는 아래의 방법들을 사용할 수 있다.
- Char을 String으로 변환한 후 toInt() 사용하기
- Character.getNumericValue(char: Char) 사용하기
- ASCII 코드 활용하기
Char을 String으로 변환한 후 toInt() 사용하기
가장 연산이 많지만 가장 간단한 방법은 Char을 String으로 변환한 후 toInt()를 사용하는 방법이다.
fun main() {
val char = '1'
println(char.toString().toInt()) // 1출력
}
Character.getNumericValue(char: Char) 사용하기
Character.getNumericValue 메서드를 사용해 char의 숫자값을 얻을 수 있다.
fun main() {
val char = '1'
println(Character.getNumericValue(char)) // 1출력
}
ASCII 코드 활용하기
마지막은 ASCII코드가 0부터 9까지가 연속해서 나오는 것을 이용하는 것이다. ASCII는 '0'이 가장 낮은 값을 가지고 1씩 증가하므로 현재 코드값에서 '0'의 코드값을 빼면 현재 Char의 Int 값을 구할 수 있다.
fun main() {
val char = '1'
val int = char.code - '0'.code
println(int) // 1출력
}
정리
Char을 Int로 형변환 하는 세 가지 방법에 대해 알아보았다. 가장 직관적인 방법은 Characters.getNumericValue(char: Char)이지만, 가장 기억하기 쉬운 방법은 Char.toString().toInt() 일 것으로 보인다. ASCII 코드를 활용하는 방법은 실수할 가능성이 높으므로 웬만해서는 쓰지 않는 것이 좋을 것으로 보인다.
Char을 Int로 변환할 때 많은 실수가 생기는 이유
Kotlin은 하나의 자료형을 다른 자료형을 변환할 때 to자료형 확장함수를 제공한다. 예를 들어 String을 Int로 변환할 때는 String.toInt()를 사용하면 된다. 하지만 Char은 기본적으로 UTF-16으로 인코딩 되고 숫자로 변환될 때 해당 코드에 해당하는 숫자로 디코딩된다. 8비트 이하의 값들에 대해서는 ASCII를 따른다.
이 때문에 Char.toInt() 를 사용해 Int를 Char로 변환을 하게 되면 예상치 못한 결과가 나온다. 한 번 '1'을 toInt()를 사용해 변환해 보도록 하자.
fun main() {
val char = '1'
println(char.toInt()) // 49출력
}
위와 같이 '1'.toInt()는 49가 됨을 알 수 있다. 이유는 바로 ASCII 코드에서 49번이 1에 해당하기 때문이다.
사람들이 많이 실수하니까 Kotlin은 이를 Deprecated 시켜버리고, ASCII 코드를 표현하는 char.code를 대신 사용하도록 유도한다.
![](https://blog.kakaocdn.net/dn/t8eMh/btsgEepfFbQ/37OhyBeHBdcXPL9igXNnX0/img.png)
하지만, Char을 Int로 변환하는 것은 가끔 필요하다. 이때 어떻게 해야 할까?
Char을 Int로 변환하기
Char을 Int로 변환하기 위해서는 아래의 방법들을 사용할 수 있다.
- Char을 String으로 변환한 후 toInt() 사용하기
- Character.getNumericValue(char: Char) 사용하기
- ASCII 코드 활용하기
Char을 String으로 변환한 후 toInt() 사용하기
가장 연산이 많지만 가장 간단한 방법은 Char을 String으로 변환한 후 toInt()를 사용하는 방법이다.
fun main() {
val char = '1'
println(char.toString().toInt()) // 1출력
}
Character.getNumericValue(char: Char) 사용하기
Character.getNumericValue 메서드를 사용해 char의 숫자값을 얻을 수 있다.
fun main() {
val char = '1'
println(Character.getNumericValue(char)) // 1출력
}
ASCII 코드 활용하기
마지막은 ASCII코드가 0부터 9까지가 연속해서 나오는 것을 이용하는 것이다. ASCII는 '0'이 가장 낮은 값을 가지고 1씩 증가하므로 현재 코드값에서 '0'의 코드값을 빼면 현재 Char의 Int 값을 구할 수 있다.
fun main() {
val char = '1'
val int = char.code - '0'.code
println(int) // 1출력
}
정리
Char을 Int로 형변환 하는 세 가지 방법에 대해 알아보았다. 가장 직관적인 방법은 Characters.getNumericValue(char: Char)이지만, 가장 기억하기 쉬운 방법은 Char.toString().toInt() 일 것으로 보인다. ASCII 코드를 활용하는 방법은 실수할 가능성이 높으므로 웬만해서는 쓰지 않는 것이 좋을 것으로 보인다.