티스토리 뷰

출처: 생활코딩

Java - 입력과 출력 (2/6) : 앱이 시작할 때 데이터를 입력 1

⩤ String[] args

아래와 같은 java코드가 있다고 하자.

package org.opentutorials.javatutorials.io;

class InputDemo {
    public static void main(String[] args) {
        // code
                // void는 출력값이 존재하지 않는다는 의미이다.

    }
}

위의 main은 아주 특별한 method이다. main method를 구현하면, 자바 어플리케이션이 실행될 때 main 메소드가 호출되면서 프로그램이 구동된다. 이 때 String[] args은 입력값의 parameter로 구동한다.

다시 말해 java 프로그램이 실행될 때 가장 먼저 실행되는 것이 main이다.

이 main 안에서 코드를 실행하여 어플리케이션이 실행된다.

✍️ 사용자 입력 받기 (Scanner, BufferedReader)

import java.util.Scanner;

class InputForeachDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        System.out.println(number);
        sc.close();
    }
}

기본적으로 Scanner를 사용해서 데이터를 입력받을 수 있으며, BufferedReader를 사용하기 위해서는 다음과 같이 코드를 바꾸면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class InputForeachDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        System.out.println(s);
        br.close();
    }
}

BufferedReader를 사용하기 위해서는 BufferedReader 선언을 하고 new BufferedReader(new InputStreamReader(System.in))로 함께 데이터를 입력 받는다.

🤲🏻 Scanner와 BufferedReader의 차이점

Scanner의 경우 한 글자 한 글자 씩 데이터를 입력받는다. 하지만, BufferedReader의 경우 한 줄씩 읽는다. 그렇기 때문에 만약에 대용량의 데이터를 받아야 하는 경우에는 BufferedReader를 사용하자. 그리고 BufferedReaderInputStreamReader와 함께 사용된다. 꼭 기억하자!

참고로 Kotlin의 경우 데이터를 읽을 때 java와 매우 비슷하게 사용하지만, 동적인 성격을 띄우고 있기 때문에 다음과 같이 코드를 작성하여 데이터를 받을 수 있다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

fun main(args: Array <String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
  // 또는
    val sc = Scanner(System.`in`)
}

// 참고로 val은 수정할 일이 없는 변수
// var는 수정할 일이 있는 변수를 의미한다.
// 그니까 변수 할당이 매우 간단한 편이다.

✋🏻 Scanner로 계속 입력 받고 싶을 때

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            System.out.println(sc.nextInt());
        }
        sc.close();
    }
}

위와 같은 방식으로 작성하면 된다. 이때 hasNextInt() 메소드는 입력값이 숫자인지를 ``Boolean`값으로 판별해준다.

␃ txt 파일 읽기

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerTryCatchDemo {
    public static void main(String[] args) {
        try {
            File file = new File("out.txt"); // 1
            Scanner sc = new Scanner(file);
            while (sc.hasNextInt()) {
                System.out.println(sc.nextInt());
            }
            sc.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Scanner로 file 읽을 때 사용하는 방법

1번 부분을 못 읽다고 하면 오류가 나니까. 이걸 catch 하기 위해서 FileNotFoundException을 사용. 여기서 그런 오류를 print해서 알려달라고 하는게 바로 printStackTrace()임.