콘솔에서 데이터를 입력 받는 두가지 방법에 대해 알아보자.
Scanner
Scanner 객체에 System.in(InputStream)을 넣어 생성한 인스턴스를 사용한다.System.in 은 키보드와 연결된 자바의 표준 입력 스트림으로 사용자가 키보드를 통해 입력한데이터를 컴퓨터를 통해 프로그램에 전달해주는 역할을 한다.
Scanner 객체는 System.in을 통해 전달된 데이터를 언어의 기본타입으로 변환해준다.아래 예제는 이름과 나이를 입력받아 출력해주는 코드이다.
fun main(args: Array<String>){
val sc : Scanner = Scanner(System.`in`)
val name = sc.next()
val age = sc.nextInt()
println("name : $name")
println("age : $age")
}
fun main() = with(Scanner(System.`in`)) {
val name = next()
val age = nextInt()
println("name : $name")
println("age : $age")
}
위 예제의 출력 값으로는 다음과 같다.
Scanner 는 사용이 간편한 대신, 느린 입출력에 해당한다.
Scanner는 수많은 자바 정규식을 검사하는 과정에서 심각한 비효율이 발생한다.
이를 극복하기 위해 빠른 입출력에 해당하는 BufferedReader 와 BufferedWriter 를 살펴보자!
BufferedReader
해당 입출력의 장점은 다음과 같다.
- 정규식을 확인하지 않고 바로 처리한다.
- 입력을 그때그때 처리하는 Scanner와 달리,
버퍼를 통해 처리 시점을 개발자가 직접 지정해줄 수 있다.
아래 예제는 이름과 나이를 입력받아 출력해주는 코드이다.
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val token = StringTokenizer(br.readLine())
println("name : ${token.nextToken().toString()}")
println("age : ${token.nextToken().toInt()}")
bw.flush()
bw.close()
}
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val token = StringTokenizer(readLine())
println("name : ${token.nextToken().toString()}")
println("age : ${token.nextToken().toInt()}")
bw.flush()
bw.close()
close()
}
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val token = StringTokenizer(readLine())
println("name : ${token.nextToken().toString()}")
println("age : ${token.nextToken().toInt()}")
bw.flush()
bw.close()
}
해당 코드의 결과 또한 Scanner 와 동일하게 출력된다.
© 참고
https://googry.tistory.com/7 (Scanner 로 입력 받기)
https://hanyeop.tistory.com/178
https://meoru-tech.tistory.com/57 (빠른 입출력 BufferedReader)
Meoru_tech
Java에는 Scanner.next()와 System.out.println()의 기본적인 입출력 함수들이 존재합니다. 마찬가지로, Kotlin에는 readLine()과 println()의 기본적인 입출력 함수들이 존재합니다. (물론, Kotlin에서 스캐너와..
meoru-tech.tistory.com