표준 입력 읽기

표준 입력 읽기

키보드나 파이프처럼 프로그램으로 들어오는 데이터를 읽으려면 readln() 함수를 쓰면 돼요. 이 함수는 한 줄 전체를 문자열로 읽어요.

출처: Kotlin 공식 문서

본문

// Reads and stores the user input in a variable. For example: Hi there!
val myInput = readln()

println(myInput)
// Hi there!

// Reads and prints the user input without storing it in a variable. For example: Hi, Kotlin!
println(readln())
// Hi, Kotlin!

여러 줄 입력을 하나의 문자열로 읽을 수도 있어요. joinToString() 함수로 각 줄을 이어 붙이시면 됩니다.

val input = generateSequence(::readlnOrNull)
  .joinToString("\n")

파일 끝(end-of-file)까지 예외 없이 읽고 싶다면 readln() 대신 readlnOrNull()을 쓰세요. readlnOrNull()은 입력의 끝에 도달하면 null을 돌려줘요.

문자열이 아닌 다른 자료형을 다룰 때는 .toInt(), .toLong(), .toDouble(), .toFloat(), .toBoolean() 같은 변환 함수로 입력을 바꿀 수 있어요. 서로 다른 자료형의 입력을 여러 번 읽어 각각 변수에 저장하는 것도 가능하죠.

// Converts the input from a string to an integer value. For example: 12
val myNumber = readln().toInt()
println(myNumber)
// 12

// Converts the input from a string to a double value. For example: 345 
val myDouble = readln().toDouble()
println(myDouble)
// 345.0

// Converts the input from a string to a boolean value. For example: true
val myBoolean = readln().toBoolean()
println(myBoolean)
// true

이 변환 함수들은 사용자가 목표 자료형의 올바른 형태를 입력한다고 가정해요. 예를 들어 "hello"를 .toInt()로 변환하면 예외가 발생해요. 함수가 문자열 입력에서 숫자를 기대하거든요.

구분자로 나뉜 여러 입력 요소를 읽으려면 .split() 함수에 구분자를 지정하면 돼요. 아래 코드는 표준 입력을 읽어 구분자 기준으로 요소 목록으로 나누고, 각 요소를 특정 자료형으로 변환해요.

// Reads the input, assuming the elements are separated by spaces, and converts them into integers. For example: 1 2 3 
val numbers = readln().split(' ').map { it.toInt() }
println(numbers)
//[1, 2, 3] 

// Reads the input, assuming the elements are separated by commas, and converts them into doubles. For example: 4,5,6
val doubles = readln().split(',').map { it.toDouble() }
println(doubles)
//[4.0, 5.0, 6.0]

Kotlin/JVM에서 사용자 입력을 읽는 다른 방법은 Java Scanner로 표준 입력 읽기를 참고하세요.

표준 입력을 안전하게 다루기

.toIntOrNull() 함수를 쓰면 문자열 입력을 정수로 안전하게 변환할 수 있어요. 변환이 성공하면 정수를 돌려주지만, 입력이 정수의 올바른 형태가 아니라면 null을 돌려줘요.

// Returns null if the input is invalid. For example: Hello!
val wrongInt = readln().toIntOrNull()
println(wrongInt)
// null

// Converts a valid input from a string to an integer. For example: 13
val correctInt = readln().toIntOrNull()
println(correctInt)
// 13

readlnOrNull() 함수도 사용자 입력을 안전하게 다루는 데 도움이 돼요. readlnOrNull()은 표준 입력에서 읽다가 입력의 끝에 도달하면 null을 돌려주는 반면, readln()은 그런 경우에 예외를 던져요.

더 알아보기 (Learn more)