-
코틀린(Kotlin) - "입력"에 대하여모바일 프로그래밍 2026. 1. 19. 22:31
kotlin Input 에 대하여..
참조 :
https://kotlinlang.org/docs/read-standard-input.html
readln( ) 함수를 사용해 표준 입력을 적용한다. (한 줄을 string으로 읽는다. )
Copyval myCity = readln() println(myCity) // Siheung println(readln()) // 변수에 저장하지 않고 입력 후 바로 출력도 가능하다.toInt( ), toLong( ), toBoolean( ) 등의 함수를 사용하면, 데이터 타입을 변경하는 것도 가능하다.
이때, 변환함수는 유저가 타겟 데이터 타입에 유효한 값을 입력한다고 가정하기 때문에, 데이터 타입 변환을 할 수 없는 값을 입력할 경우 ( ex : “hello 작성 후 toInt 로 변환 시도 ) exception이 발생한다.
val myAge = readln().toInt().split( ) 함수를 사용해, 구분자를 기준으로 리스트 입력을 받아 특정 타입의 리스트로 반환한다.
val scores = readln().split(' ').map { it.toInt() } // 1 2 3 입력 println(scores) // [1, 2, 3] val scoresDouble = readln().split(',').map { it.toDouble() } // 1,2,3 입력 println(scoresDouble) // [1.0, 2.0, 3.0].toIntOrNull( ) 을 이용해 안전하게 표준 입력을 핸들링할 수 있다.
val notNumber = readln().toIntOrNull() // I am Yong! println(notNumber) // null val trueNumber = readln().toIntOrNull() // 2026 println(trueNumber) // 2026
BufferedInputStream + StringBuilder 조합으로 입출력 I/O 시간 줄이기
참고 :
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedInputStream.html?utm_source=chatgpt.com (bufferedInputStream)
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.text/-string-builder/?utm_source=chatgpt.com (StringBuilder)
BufferedInputStream의 경우,
- 생성 시 내부 버퍼 배열 만듬.
- 필요할 때 여러 바이트를 한 번에 버퍼로 채우고, 그 다음은 메모리에서 소비함.
- I/O 호출 횟수를 줄이는 효과를 볼 수 있다.
메모리 (내부에서 버퍼를 만들어 데이터를 저장하고 있음.)와 I/O에 걸리는 시간 사이의 trade-off를 따져, BufferedInputStream을 사용하면 좋을 것 같다.
kotlin에서 기본적으로 string을 변환하는 연산은 결과를 새 string 객체로 만든다.
ans += "a" println(ans)StringBuilder의 경우, mutable 문자 시퀀스라, 한 객체에 계속 append가 가능하다.
매번 새 문자열을 만들지 않고, 내부에 append로 쌓고 마지막에 한 번 toString( ) 으로 출력하면 I/O에 걸리는 시간을 줄일 수 있다.
고민 : 어떻게 입출력을 작성하면 좋을까?
바이트처리 vs 문자처리
BufferedInputStream 또는 BufferedReader(InputStreamReader… )
바이트 처리 시의 장점이 있겠지만 가독성과 단순한 구현을 고려해, BufferedReader(InputStreamReader)를 사용하기로 했다.
아래는 n개의 줄에서 두 수가 주어졌을 때 각각의 합을 출력하는 코드를 작성해본 것이다.
import java.io.BufferedReader import java.io.InputStreamReader import java.util.StringTokenizer fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) val n = br.readLine().trim().toInt() val out = StringBuilder() repeat(n) { val st = StringTokenizer(br.readLine()) val a = st.nextToken().toInt() val b = st.nextToken().toInt() out.append(a + b).apppend('\n') } print(out.toString()) }상황에 따라 다른 입력 방법을 사용하게 될 것 같지만,기본적으로 사용할 나만의 템플릿 하나 정도는 가지고 가는 것도 나쁘지 않겠지?'모바일 프로그래밍' 카테고리의 다른 글
지불 알림 서비스 만들기 (feat. Kotlin, 미니PC, TailScale) (0) 2026.01.25 Kotlin(코틀린) - "입력"에 대하여 2탄 (0) 2026.01.21 React Native 개발 환경 설정하기 (0) 2025.11.16