목차
개요
이번 포스트에서는 Kotlin의 기본 입력과 출력 방법에 대해 정리하고자 한다.
Kotlin의 입력
Kotlin에서의 입력 방법은 크게 다음 3가지로 나뉜다.
- Java의 Scanner 클래스를 이용한 입력
readLine()
또는readln()
를 이용한 입력- BufferedReader 클래스를 이용한 입력
1. Java의 Scanner 클래스를 이용한 입력
Kotlin은 Java의 클래스를 그대로 가져와서 쓸 수 있기 때문에 Java가 익숙한 경우라면 그냥 Scanner 클래스로 간단하게 입력을 처리할 수 있다. 이 경우에는 사용 방법이 Java와 완전히 동일하기 때문에 Kotlin에 익숙하지 않은 경우라면 이 방법을 사용하는 게 편리할 것이다.
주의할 점은 Kotlin에서는 in
이 키워드이기 때문에 반드시 그레이브(`)로 감싸주어야 한다. 또한 Kotlin에서는 new
키워드가 존재하지 않으므로 객체를 생성할 때 생성자를 바로 호출한다는 것도 주의해야 한다.
이 방법은 Java와 동일하게 공백 또는 개행을 기준으로 입력받는다.
import java.util.Scanner
...
val sc = Scanner(System.`in`)
/*
1 2 3
*/
val a = sc.nextInt() // 1
val b = sc.nextInt() // 2
val c = sc.nextInt() // 3
2. readLine() 또는 readln()을 이용한 입력
Kotlin에서는 기본적인 입력으로 readLine()
과 readln()
을 제공한다. 두 메소드 모두 줄 단위로 입력을 받아 문자열 형식으로 반환한다. 문자열 형식으로 반환하기 때문에 프로그램에서 필요한 형태에 따라 추가적인 가공이 필요하다. 두 메소드의 차이는 null의 허용 여부에 있는데, readLine()
은 null값을 허용하는 String?
타입으로 반환하지만, readln()
은 non-null 타입이라는 점이 다르다.
이외에도 readlnOrNull()
이라는 메소드가 있긴 한데, 이는 readLine()
메소드를 그대로 호출하는 것이다.
/*
한 줄 입력 받기
*/
val str = readln() // 한 줄 입력 받기
3. BufferedReader 클래스를 이용한 입력
좀 더 빠른 입력을 받기 위해 BufferedReader 클래스를 사용하는 방법도 있다. 이 방법 역시 2번과 마찬가지로 줄 단위로 입력을 받아 문자열 형식으로 반환하기 때문에 필요에 따라 추가적인 가공이 필요할 수 있다. 하지만 그러한 불편함을 감수하더라도 상당히 큰 속도 차이를 보이기 때문에 속도를 향상시키고 싶을 때 사용하면 된다.
Kotlin에서는 예외처리가 강제되지 않기 때문에 Java와는 다르게 throws
나 try-catch
로 예외처리를 해주지 않아도 된다.
import java.io.BufferedReader
import java.io.InputStreamReader
...
val br = BufferedReader(InputStreamReader(System.`in`))
/*
BufferedReader로 한 줄 입력 받기
*/
val str = br.readLine() // BufferedReader로 한 줄 입력 받기
Kotlin에서는 BufferedReader 객체를 선언할 때 위와 같이 선언할 수도 있지만 아래와 같이 훨씬 간결하게 선언할 수도 있다. 두 경우 모두 같은 결과를 내므로 위의 방식을 사용할 필요는 없다. 아래의 경우는 추가적인 클래스를 import 할 필요도 없다.
val br = System.`in`.bufferedReader()
/*
BufferedReader로 한 줄 입력 받기
*/
val str = br.readLine() // BufferedReader로 한 줄 입력 받기
Kotlin의 출력
Kotlin에서의 출력 방법은 크게 다음 2가지로 나뉜다.
print()
,println()
을 이용한 출력- BufferedWriter 클래스를 이용한 출력
1. print(), println()을 이용한 출력
Kotlin의 기본적인 출력 방법은 print()
, println()
메소드를 이용하는 것이다. 이 두 메소드는 Java의 System.out.print()
, System.out.println()
과 완전히 동일하다. 두 메소드는 출력 후 개행여부의 차이가 있다.
// Kotlin
print("출력1")
println("출력2")
println("출력3")
/*
출력1출력2
출력3
*/
// Java
System.out.print("출력1");
System.out.println("출력2");
System.out.println("출력3");
/*
출력1출력2
출력3
*/
2. BufferedWriter 클래스를 이용한 출력
좀 더 빠른 출력을 위해 BufferedWriter 클래스를 이용할 수 있다. 이 방법은 write()
메소드로 버퍼에 출력할 내용을 저장해두고 flush()
메소드로 버퍼를 비우면서 출력하게 된다. 주의할 점은 BufferedReader 클래스의 입력이 문자열만 반환하듯이 write()
도 문자열만 버퍼에 저장할 수 있다. 정수를 입력한 경우엔 해당 정수값에 해당하는 유니코드 문자가 버퍼에 저장된다.
flush()
이외에도 close()
를 이용하여 버퍼의 내용물을 출력할 수 있다. 두 메소드의 차이점은 flush()
는 단순히 버퍼를 비워서 출력해주는 역할만 하지만 close()
는 버퍼를 비워서 출력한 후 버퍼를 닫아준다는 점이다.
BufferedWriter 또한 BufferedReader와 마찬가지로 Java보다 훨씬 간결하게 선언할 수 있고 throws
나 try-catch
로 예외처리를 해주지 않아도 된다.
val bw = System.out.BufferedWriter() // BufferedWriter(OutputStreamWriter(System.out))와 동일
bw.write("출력\n")
bw.write(97)
bw.write("버퍼 이용하기")
bw.flush()
bw.close()
/*
출력
a버퍼 이용하기
*/
'Programming Language > Kotlin & Java' 카테고리의 다른 글
Kotlin에서 한 줄로 받은 입력을 여러개의 변수에 할당하는 방법(구조 분해) (0) | 2022.12.08 |
---|---|
Kotlin 기본 문법 6 : 클래스와 접근 지정자 (1) | 2022.12.02 |
Kotlin 기본 문법 5 : 배열 (0) | 2022.11.25 |
Kotlin 기본 문법 4 : 조건문과 반복문 (0) | 2022.11.23 |
Kotlin 기본 문법 3 : String (0) | 2022.11.21 |
댓글