사용자가 어떤 값을 입력했을 때, 그에 맞는 출력을 하려면 어떻게 해야 할까요?
자바에서는 Scanner와 BufferedReader 두 가지 방법이 있습니다.
공부하시면서 Scanner 클래스를 흔히 사용하셨을 겁니다.
하지만, 입력해야 되는 값이 무수히 많을 경우 Scanner 클래스를 사용하면 데이터가 많을수록 시간이 지체됩니다.
좀 더 효율적인 방법은 없는걸까요?
해당 클래스들의 차이 및 특징에 대해 알아보며 상황에 맞는 클래스를 선택해보도록 하겠습니다.
Scanner란?
Scanner 특징
Scanner 클래스는 다양한 형식의 입력 데이터를 파싱하고 처리합니다.
또한, java.utill 패키지에 속해있습니다.
- 공백이나 구분 문자로 데이터를 분리하여 읽을 수 있습니다.
- 다양한 자료형(정수, 실수, 문자열 등)의 데이터를 읽을 수 있습니다.
- 편리한 메서드들을 제공하여 사용자 입력 처리에 유용합니다.
Scanner 사용 예시
public class Main {
public static void main(String[] args) {
}
}
클래스의 기본 형태를 갖춰줍니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
}
}
Scanner sc = new Scanner(System.in); 입력 후
ctrl + shift + o 를 눌러주면 패키지가 자동으로 추가됩니다.(import java.utill.Scanner;)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
sc.close();
System.out.println(a);
}
}
입력할 값을 정수라 가정하고,
int a = sc.nextInt();를 입력하였습니다.
해당 한 줄로 인해 실행하면 콘솔창에 입력란이 생성됩니다.
정수형을 입력 할 수 있어요.
sc.close();를 입력하여 스캐너를 닫아주고 나면
System.out.println(a);로 인해 입력한 값이 출력됩니다.
즉, a에 11을 입력하면 11이 출력됩니다.
BufferedReader란?
BufferedReader 특징
BufferedReader 클래스는 버퍼링 기능을 활용하여 입출력 성능을 향상시킵니다.
또한, java.io 패키지에 속해있습니다.
- 버퍼링 기능으로 인해 입출력 작업이 빈번하게 발생할 때 성능 개선을 기대할 수 있습니다.
- readLine() 메서드를 사용하여 한 줄 씩 문자열 형태로 데이터를 읽어올 수 있습니다.
- 파일이나 네트워크 소켓 등 다양한 소스로부터 데이터를 읽어올 수 있습니다.
BufferedReader 사용 예시
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
}
}
BufferedReader객체 생성 후 InputStreamReader객체를 생성합니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main1 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
}
}
한 줄씩 String 형태로 받기 위해 readLine을 추가합니다.
readLine을 추가하기 위해 StringTokenizer를 생성합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main1 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int b = Integer.parseInt(st.nextToken());
br.close();
System.out.println(b);
}
}
StringTokenizer로 받은 값을 int형태로 파싱해주어야 합니다.
int b = Integer.parseInt(st.nextToken());을 입력한 후
버퍼드리더를 닫아줍니다.(br.close();)
syso입력 후 ctrl + space를 눌러 b를 출력할 수 있도록 합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main1 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int b = Integer.parseInt(st.nextToken());
br.close();
System.out.println(b);
}
}
자바에서 입출력 작업을 수행할 때, 예외 상황이 발생할 수 있으므로,
이를 처리하기 위한 클래스 IOException를 입력하였습니다.
마찬가지로 정수 12를 입력하면 12가 출력됩니다.
Scanner vs. BufferedReader 정리
JAVA에서의 입출력방법인 Scanner와 BufferefReader에 대해 알아보았습니다.
Scanner 클래스는 편리한 메서드들을 제공하여 자료형변환 등 다양한 작업에 용이하고,
BufferedReader 클래스는 대량의 데이터 처리 혹은 반복적인 입출력 작업이 필요한 경우 용이합니다.
따라서, 사용 목적과 상황에 맞게 Scanner와 BufferefReader 중 적절한 클래스를 선택하시면 됩니다.
'Language > JAVA' 카테고리의 다른 글
[JAVA] 프로그래머스 LV.0 더크게 합치기 풀이 - 형변환 이렇게 하세요 (0) | 2023.08.10 |
---|---|
[JAVA] join() 메소드로 배열 속 문자들 합치기 (0) | 2023.08.09 |
[JAVA] charAt 메소드로 문자열에서 문자 하나 출력하기 (0) | 2023.08.08 |
[JAVA] 홀/짝 구분하고, 홀/짝의 합 구하기 (+ 프로그래머스 LV.0 홀짝에 따라 다른 값 반환하기) (0) | 2023.08.07 |
[JAVA] trim() 메서드로 공백 제거하기 (0) | 2023.08.07 |