โScanner์ ์ ์ฐ๊ณ BufferedReader๋ก ์ฐ๋ ์ด์ โ
Scanner๋ณด๋ค BufferedReader๊ฐ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์.
๋ ์์ธํ๊ฒ ์์๋ณด์๋ฉด
1๏ธโฃ ์ฑ๋ฅ
BufferedReader๋ ๋ฒํผ๋ง์ ์ง์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ฉ ์ฝ์ด์ค๋ฏ๋ก ์ ์ถ๋ ฅ ์์ ์ด ํจ์จ์ ์ผ๋ก ์ํ๋๋ค.
BufferedReader๋ ๋ ํฐ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฝ์ด์ฌ ์ ์์ด, ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ํนํ ์ ์ฉํ๋ค.
Scanner๋ ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ๋ง์ ์ฌ์ฉํ์ง๋ง, ๋ฒํผ ํฌ๊ธฐ๊ฐ ์์์ ํจ์จ์ ์ธ ๋ฒํผ๋ง์ ์ ๊ณตํ์ง ๋ชปํ ์ ์๋ค.
๋ฐ๋ผ์, ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ฉ ์ฝ์ด์ค๋๋ฐ ์ ์ฝ์ด ์์ ์ ์๋ค.
Java์์ BufferedReader์ ๊ธฐ๋ณธ ๋ฒํผ ํฌ๊ธฐ : 8,192 byte
Java์์ Scanner์ ๊ธฐ๋ณธ ๋ฒํผ ํฌ๊ธฐ : 1,024 byte
2๏ธโฃ ์์ธ ์ฒ๋ฆฌ
BufferedReader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฝ๋ค.
BufferedReader๋ IOException์,
Scanner๋ Exception์ ๋ฐ์์ํจ๋ค.
๋ฐ๋ผ์ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์๋ก ๋ค๋ฅธ ์์ธ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Scanner๋ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์๊ณผ ๋ค๋ฅผ ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝํฅ์ด ์์ด์ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ ๋ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค.
Scanner๊ฐ BufferedReader๋ณด๋ค try-catch ๋ธ๋ก์ด ๋ ๋ณต์กํ ์ ์๋ค.
BufferedReader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฌ์ด ์ด์
โ IOException ์ฒ๋ฆฌ์ ๋ช ํ์ฑ
BufferedReader๋ IOException ์์ธ๋ฅผ ๋ฐ์ ์ํค๋๋ฐ IOException์ ํ์ผ ์ ์ถ๋ ฅ ๋๋ ์คํธ๋ฆผ ๊ด๋ จ ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์ธ์ด๋ค.
Scanner๋ InputMismatchExcption, NoSuchElementException๋ฑ๊ณผ ๊ฐ์ด ๋ ๊ตฌ์ฒด์ ์ธ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝํฅ์ด ์์ด, ์์ธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ๋ ๋ณต์กํด์ง ์ ์๋ค.
์ฆ, BufferedReader๋ฅผ ์ฐ๋ฉด IOException ์ผ๋ก ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ๋๊ณ ,
Scanner ๋ ๊ตฌ์ฒด์ ์ธ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํด์ค์ผ ํ๋ค.
โก ์คํธ๋ฆผ ๋ซ๊ธฐ์ ์ฉ์ด์ฑ
BufferedReader๋ ๋จ์ํ close() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์คํธ๋ฆผ์ ๋ซ์ ์ ์๋ค.
๊ทธ๋ฌ๋ Scanner์ close() ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง, ์คํธ๋ฆผ ๋ซ๊ธฐ ์์ธ ์ฒ๋ฆฌ์ ๋ํ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ์ด ๋ฐ์ํ ์๋ ์๋ค.
BufferedReader๋ฅผ ์ฌ์ฉํ ์์ธ ์ฒ๋ฆฌ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
try {
input = br.readLine();
} catch (IOException e) {
System.err.println("IOException ๋ฐ์: " + e.getMessage());
return;
}
System.out.println("์
๋ ฅํ ๋ฌธ์์ด: " + input);
}
}
Scanner์ ์ฌ์ฉํ ์์ธ ์ฒ๋ฆฌ
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String input = null;
try {
input = sc.nextLine();
} catch (Exception e) {
System.err.println("Exception ๋ฐ์: " + e.getMessage());
return;
}
System.out.println("์
๋ ฅํ ๋ฌธ์์ด: " + input);
}
}
Scanner๊ณผ BufferedReader์ ์ฐจ์ด์ : ๋ค์ํ ํ์ ์ฒ๋ฆฌ
Scanner๋ ํ ์คํธ ์ ๋ ฅ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ค์ํ ์๋ฃํ์ผ๋ก ๋ณํํ ์ ์๋ ํธ๋ฆฌํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ด๋ ์ ์, ์ค์, ๋ฌธ์์ด ๋ฑ ๋ค์ํ ํ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
BufferedReader๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์์ด๋ก ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ํ์ ๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ๋ค.
๊ทธ๋์ ์ฌ์ฉํ๊ธฐ์๋ Scanner๊ฐ ๋ ํธ๋ฆฌํ๋, ์ฑ๋ฅ์ BufferedReader๊ฐ ์ข๋ค.
BufferedReader๋ก ๋์ด์ฐ๊ธฐ ์ ๋ ฅ๋ฐ๋ ๋ฐฉ๋ฒ

์ด๋ ๊ฒ ๋์ด์ฐ๊ธฐ๋ก ์ ๋ ฅ์ ๋ฐ๊ณ ์ถ๋ค๋ฉด?
๋ฐฉ๋ฒ 1 - StringTokenizer ์ด์ฉ
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr=new int[9][9];
for(int i=0;i<arr.length;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0;j<arr[0].length;j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
}
}
br.readLine()์ ํ ๋ฌธ์ฅ์ ๋ฐ๋ ๊ฒ์ด๊ณ
String Tokenizer์ ํน์ ๊ตฌ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ํฐ์ผ๋ก ๋ถ๋ฆฌํด์ฃผ๋ ํด๋์ค์ด๋ค.
๋ฐฉ๋ฒ 2 - split ์ด์ฉ
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr=new int[9][9];
for(int i=0;i<arr.length;i++) {
String[] strArr = br.readLine().split(" ");
for(int j=0;j<arr[0].length;j++) {
arr[i][j] = Integer.parseInt(strArr[j]);
}
}
}
}
split์ ์ด์ฉํ์ฌ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ์๋ผ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
'๐น๐๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โScanner์ ์ ์ฐ๊ณ BufferedReader๋ก ์ฐ๋ ์ด์ โ
Scanner๋ณด๋ค BufferedReader๊ฐ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์.
๋ ์์ธํ๊ฒ ์์๋ณด์๋ฉด
1๏ธโฃ ์ฑ๋ฅ
BufferedReader๋ ๋ฒํผ๋ง์ ์ง์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ฉ ์ฝ์ด์ค๋ฏ๋ก ์ ์ถ๋ ฅ ์์ ์ด ํจ์จ์ ์ผ๋ก ์ํ๋๋ค.
BufferedReader๋ ๋ ํฐ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฝ์ด์ฌ ์ ์์ด, ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ํนํ ์ ์ฉํ๋ค.
Scanner๋ ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ๋ง์ ์ฌ์ฉํ์ง๋ง, ๋ฒํผ ํฌ๊ธฐ๊ฐ ์์์ ํจ์จ์ ์ธ ๋ฒํผ๋ง์ ์ ๊ณตํ์ง ๋ชปํ ์ ์๋ค.
๋ฐ๋ผ์, ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ฉ ์ฝ์ด์ค๋๋ฐ ์ ์ฝ์ด ์์ ์ ์๋ค.
Java์์ BufferedReader์ ๊ธฐ๋ณธ ๋ฒํผ ํฌ๊ธฐ : 8,192 byte
Java์์ Scanner์ ๊ธฐ๋ณธ ๋ฒํผ ํฌ๊ธฐ : 1,024 byte
2๏ธโฃ ์์ธ ์ฒ๋ฆฌ
BufferedReader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฝ๋ค.
BufferedReader๋ IOException์,
Scanner๋ Exception์ ๋ฐ์์ํจ๋ค.
๋ฐ๋ผ์ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์๋ก ๋ค๋ฅธ ์์ธ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Scanner๋ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์๊ณผ ๋ค๋ฅผ ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝํฅ์ด ์์ด์ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ ๋ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค.
Scanner๊ฐ BufferedReader๋ณด๋ค try-catch ๋ธ๋ก์ด ๋ ๋ณต์กํ ์ ์๋ค.
BufferedReader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฌ์ด ์ด์
โ IOException ์ฒ๋ฆฌ์ ๋ช ํ์ฑ
BufferedReader๋ IOException ์์ธ๋ฅผ ๋ฐ์ ์ํค๋๋ฐ IOException์ ํ์ผ ์ ์ถ๋ ฅ ๋๋ ์คํธ๋ฆผ ๊ด๋ จ ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์ธ์ด๋ค.
Scanner๋ InputMismatchExcption, NoSuchElementException๋ฑ๊ณผ ๊ฐ์ด ๋ ๊ตฌ์ฒด์ ์ธ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝํฅ์ด ์์ด, ์์ธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ๋ ๋ณต์กํด์ง ์ ์๋ค.
์ฆ, BufferedReader๋ฅผ ์ฐ๋ฉด IOException ์ผ๋ก ์ ์ถ๋ ฅ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ๋๊ณ ,
Scanner ๋ ๊ตฌ์ฒด์ ์ธ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํด์ค์ผ ํ๋ค.
โก ์คํธ๋ฆผ ๋ซ๊ธฐ์ ์ฉ์ด์ฑ
BufferedReader๋ ๋จ์ํ close() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์คํธ๋ฆผ์ ๋ซ์ ์ ์๋ค.
๊ทธ๋ฌ๋ Scanner์ close() ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง, ์คํธ๋ฆผ ๋ซ๊ธฐ ์์ธ ์ฒ๋ฆฌ์ ๋ํ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ์ด ๋ฐ์ํ ์๋ ์๋ค.
BufferedReader๋ฅผ ์ฌ์ฉํ ์์ธ ์ฒ๋ฆฌ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
try {
input = br.readLine();
} catch (IOException e) {
System.err.println("IOException ๋ฐ์: " + e.getMessage());
return;
}
System.out.println("์
๋ ฅํ ๋ฌธ์์ด: " + input);
}
}
Scanner์ ์ฌ์ฉํ ์์ธ ์ฒ๋ฆฌ
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String input = null;
try {
input = sc.nextLine();
} catch (Exception e) {
System.err.println("Exception ๋ฐ์: " + e.getMessage());
return;
}
System.out.println("์
๋ ฅํ ๋ฌธ์์ด: " + input);
}
}
Scanner๊ณผ BufferedReader์ ์ฐจ์ด์ : ๋ค์ํ ํ์ ์ฒ๋ฆฌ
Scanner๋ ํ ์คํธ ์ ๋ ฅ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ค์ํ ์๋ฃํ์ผ๋ก ๋ณํํ ์ ์๋ ํธ๋ฆฌํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ด๋ ์ ์, ์ค์, ๋ฌธ์์ด ๋ฑ ๋ค์ํ ํ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
BufferedReader๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์์ด๋ก ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ํ์ ๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ๋ค.
๊ทธ๋์ ์ฌ์ฉํ๊ธฐ์๋ Scanner๊ฐ ๋ ํธ๋ฆฌํ๋, ์ฑ๋ฅ์ BufferedReader๊ฐ ์ข๋ค.
BufferedReader๋ก ๋์ด์ฐ๊ธฐ ์ ๋ ฅ๋ฐ๋ ๋ฐฉ๋ฒ

์ด๋ ๊ฒ ๋์ด์ฐ๊ธฐ๋ก ์ ๋ ฅ์ ๋ฐ๊ณ ์ถ๋ค๋ฉด?
๋ฐฉ๋ฒ 1 - StringTokenizer ์ด์ฉ
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr=new int[9][9];
for(int i=0;i<arr.length;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0;j<arr[0].length;j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
}
}
br.readLine()์ ํ ๋ฌธ์ฅ์ ๋ฐ๋ ๊ฒ์ด๊ณ
String Tokenizer์ ํน์ ๊ตฌ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ํฐ์ผ๋ก ๋ถ๋ฆฌํด์ฃผ๋ ํด๋์ค์ด๋ค.
๋ฐฉ๋ฒ 2 - split ์ด์ฉ
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] arr=new int[9][9];
for(int i=0;i<arr.length;i++) {
String[] strArr = br.readLine().split(" ");
for(int j=0;j<arr[0].length;j++) {
arr[i][j] = Integer.parseInt(strArr[j]);
}
}
}
}
split์ ์ด์ฉํ์ฌ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ์๋ผ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.