본문 바로가기
Kotlin

[Kotlin] readLine()과 자료형 변환

by JongSeok 2022. 12. 20.

콘솔 창에서 사용자로부터 입력을 받을 수 있는 방법과 입력된 값을 특정 자료형으로 변환하는 방법에 대해 알아보겠습니다.

readLine()을 이용한 한 줄 입력

 

kotlin 기본 함수 중 readLine()은 개행(Enter) 이전까지의 입력을 String으로 저장합니다. 물론, 공백(띄어쓰기)이 포함됩니다.

fun main(args: Array<String>) {
    val input = readLine()!!
    println("input : " + input)
}

readLine() 실행 예시

readLine()의 반환 값은 String? 이므로 Not Null 타입으로 변환해주기 위해 !!를 붙여줬습니다.

 

자료형 변환

 

입력된 문자열을 쪼개거나 숫자로 바꾸거나 배열로 저장하기 위해서는 자료형을 변환하는 과정이 필요합니다.

대표적인 예시로 살펴보겠습니다.

fun main(args: Array<String>) {
    val input = readLine()!!.toInt()
    println("input : $input, ${input is Int}")
}

12345로 출력은 같지만 ${input is Int} 구문을 통해 입력 값이 Int형으로 정상적으로 변환되었음을 확인했습니다.


이번엔 readLine()을 이용해 입력받은 문자열을 배열(Array)로 출력해보겠습니다.

fun main(args: Array<String>) {
    val input = readLine()!!.toCharArray()
    println(input.contentToString())
    println(input[3])
}

toCharArray()는 문자열의 모든 요소를 문자로 쪼개어 저장합니다. 배열의 요소를 한번에 출력하는 방법은 contentToString()을 사용합니다.

배열의 3번째 요소인 'd'가 잘 출력됨을 알 수 있습니다.


입력된 문자열을 숫자로 변환하여 해당 숫자를 배열로 저장하는 것도 가능합니다.

fun main(args: Array<String>) {
    val input = readLine()!!.toCharArray().map { it.digitToInt() }.toTypedArray()
    println(input.contentToString())
    println("${input[3]}, ${input[3] is Int}")
}

먼저 입력된 문자열을 문자로 쪼개어 배열의 형태로 저장합니다. map 키워드는 Array의 모든 요소를 펼쳐서 { } 내부의 조건에 따라 연산을 수행한다고 생각하면 될 것 같습니다. 해당 연산 이후 요소의 타입에 맞는 Array로 변환합니다.

 

이때, toInt()를 사용하지 않고 digitToInt()를 사용하는 이유는 각 요소는 숫자가 아닌 '숫자'입니다.

즉, 배열의 0번째 요소는 1이 아니라 '1'이기 때문에 input[0].toInt() 실행 시 숫자 1로 변환되는 것이 아니라 아스키 코드 1에 해당하는 문자로 변환됩니다. 따라서 우리가 원하는 문자 그대로의 숫자로 변환하기 위해 digitToInt()를 사용합니다.

 

cf. 배열을 다시 문자열로 합치고 싶다면 .joinToString("")을 사용합니다. 요소 사이 ""내부의 문자를 추가하며 합쳐집니다.

728x90
반응형