본문 바로가기
언어/Kotlin&Java

[코틀린/Kotlin] 기초 #03_코틀린 입출력

by 옹구스투스 2021. 8. 9.
반응형

환경 : Kotlin Version = 1.5.20, Java version = 14.0.2 JVM, Android Studio

 

코틀린에서 콘솔 입력 및 출력하기


0.참고 자료

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/

 

kotlin.io - Kotlin Programming Language

 

kotlinlang.org


1. 표준 입출력 함수

 1) readLine() 함수

  코틀린의 표준 라이브러리 중 kotlin.io에 속한 함수로 대표적인 입력 함수이다.

  readLine()함수는 standard input stream으로부터 한 줄을 읽으며(콘솔 창의 개행으로 구분),

  반환값은 nullable한 string이다. 즉 입력받은 데이터가 숫자라면 숫자로 변환해 줘야 하고,
  데이터가 여러 개라면 구분 기호를 통해 나누어 주는 작업이 필요하다.

  입력할 데이터가 더 이상 없으면, null을 반환한다.

var name = readLine()
    //!!은 null값이 들어올 경우 NPE발생 -> readLine의 반환값은 nullable하지만 이를 non-null로 변환해줌
    //입력 받은 문자열을 숫자로 변환
    var age = readLine()!!.toInt()
    //한 줄에 여러 개의 데이터가 들어올 때 이를 공백 기준으로 나누고 숫자로 변환하여 List<Int>형태로 저장
    var manyData = readLine()!!.split(' ').map { it.toInt() }
    //size만큼의 데이터를 받아서 Array<Int>형태로 저장 후 합을 출력
    var size = readLine()!!.toInt()
    var arr = Array<Int>(size) {readLine()!!.toInt()}
    var sum=0
    for (it in arr){
        sum+=it
    }
    println(name)
    println(age)
    println(manyData)
    println(sum)

 2) println() 함수, print() 함수

   println(), print() 모두 코틀린의 표준 라이브러리 중 kotlin.io에 속한 함수로 대표적인 출력 함수이다.

   println()은 standard ouput stream에 줄바꿈 개행을 포함하여 주어진 메시지를 출력한다.

   print()은 standard ouput stream에 주어진 메시지를 출력한다.

   즉 둘의 차이는 개행이 있나 없나 차이이다.

    println("println은 줄바꿈이 ")
    println("있어용")
    print("print는 줄바꿈이 ")
    print("없어용")


2. Java의 Scanner 사용하기

import java.util.*

혹은

impojt java.util.Scanner

로 java의 Scanner를 가져와 사용할 수 있다.

 

    //kotlin code
    //in은 Kotlin에서 사용하는 예약어이기 때문에 Java에서 사용하던 변수명을 ``로 감싸서 사용
    val sc = Scanner(System.`in`)
    val name = sc.nextLine()//한 줄을 읽는다.
    val age = sc.nextInt()//공백을 기준으로 입력받고 이를 Int형으로 리턴한다.
    println(name)
    println(age)
        //java code
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int age = sc.nextInt();
        System.out.println(name);
        System.out.println(age);


3. Java의 BufferedReader 사용하기

위의 Scanner는 띄어쓰기와 줄바꿈을 경계로 입력값을 인식하기 때문에 따로 가공할 필요가 없다.

그러나 속도가 느리다!

BufferedReader는 줄바꿈만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 데이터를 따로 가공해야 하지만, 속도가 빠르다. 따라서 알고리즘 문제풀이를 위해선 BufferedReader의 사용이 필연적이다.

공식 문서

공식 문서에 따르면 input stream에서 문자를 읽는 함수로, 배열 및 줄을 효율적으로 읽기 위해 문자를 버퍼링한다고 한다. 즉 다양한 데이터를 입력받을 때 효율적으로 이용할 수 있다.

// 버퍼링 : 지정한 공간의 버퍼 메모리에 값을 저장해놓고, 지정한 공간을 넘으면 한꺼번에 보내는 것

               -> 시스템의 속도가 빨라지고 효율을 올리기 위해 사용

//kotlin code
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.StringTokenizer

fun main() {

    val br = BufferedReader(InputStreamReader(System.`in`))
    val token = StringTokenizer(br.readLine())
    println("두 값의 곱은?")
    println(token.nextToken().toInt()*token.nextToken().toInt())

}
//java code
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class PracticeJava {
    public static void main(String[] args) throws Exception{// java에서 BufferedReader사용 시 예외처리 필수!

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(br.readLine());
        System.out.println("두 값의 곱은?");
        System.out.println(Integer.parseInt(token.nextToken())*Integer.parseInt(token.nextToken()));



TODO

버퍼링 심화 정리

 

반응형

댓글