1. InputStreamReaderํด๋ž˜์Šค

์ŠคํŠธ๋ฆผ์˜ ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆผ์„ ์ฒด์ธ ์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ ์—์„œ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์ด๋Š” ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ์„ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Java์˜ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

InputStreamReader ํด๋ž˜์Šค

ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ๋˜๋Š” ํŒŒ์ผ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋‚ด๋ณด๋‚ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ "์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ"์˜ ์ข‹์€ ์˜ˆ๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค InputStreamReader.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ํด๋ž˜์Šค FileReader๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Reader๊ทธ๋ฆฌ๊ณ  InputStreamReader๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๊นŒ? ๋งž์Šต๋‹ˆ๋‹ค โ€” InputStream.

๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐœ์ฒด ๋˜๋Š” ํ•ด๋‹น ํ•˜์œ„ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ InputStreamReader์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . InputStream์˜ˆ:

String src = "c:\\projects\\log.txt";
FileInputStream input = new FileInputStream(src);
InputStreamReader reader = new InputStreamReader(input);

ํด๋ž˜์Šค ์—๋Š” ํด๋ž˜์Šค์— ์žˆ๋Š” InputStreamReader๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ Reader์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

InputStreamReaderํด๋ž˜์Šค์™€ ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ž˜์Šค ๊ฐ„์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ FileReader๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. FileReaderํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€๋งŒ(์ด๊ฒŒ ๋ฐ”๋กœ ์ด๋ผ๊ณ  ํ•˜๋Š” ์ด์œ  ์ž…๋‹ˆ๋‹ค FileReader) .InputStreamReaderInputStream

FileReader๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ฒด ์—์„œ ๋ฌธ์ž๋ฅผ ์ฝ์œผ๋ฉด read()๋””์Šคํฌ์˜ ํŒŒ์ผ์—์„œ 2๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด chars.

InputStreamReader๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ฒด ์—์„œ ๋ฌธ์ž๋ฅผ ์ฝ์œผ๋ฉด ์ „๋‹ฌ๋œ ๊ฐœ์ฒด read()์—์„œ 2๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ  FileInputStreamํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋ฉ”์„œ๋“œ ์— ๋Œ€ํ•œ ํ˜ธ์ถœ ์ฒด์ธread() ์ž…๋‹ˆ๋‹ค .


2. BufferedReaderํด๋ž˜์Šค

๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ํด๋ž˜์Šค๋Š” BufferedReader. ์ด๊ฒƒ์€ ๋˜ํ•œ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” "์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ"์ž…๋‹ˆ๋‹ค.

์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด BufferedReaderํด๋ž˜์Šค๋Š” ์˜ ํ•˜์œ„ ํด๋ž˜์Šค Reader์ด๋ฉฐ ๋ฌธ์ž๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋ฌธ์ž๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ , ์ฆ‰ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์ŠคํŠธ๋ฆผ ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค Reader.

์ ์€ ๋ฌด์—‡์ธ๊ฐ€? ์™€ ๋‹ฌ๋ฆฌ InputStreamReader์ด BufferedReaderํด๋ž˜์Šค๋Š” ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋งํ•ฉ๋‹ˆ๋‹ค .

ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐœ์ฒด์—์„œ ๋‹จ์ผ ๋ฌธ์ž๋ฅผ ์ฝ์„ ๋•Œ BufferedReader๊ฐœ์ฒด๋Š” ์†Œ์Šค ์ŠคํŠธ๋ฆผ์—์„œ ํ•œ ๋ฒˆ์— ๋งŽ์€ ๋ฌธ์ž ๋ฐฐ์—ด์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด์—์„œ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ์ฝ์œผ๋ฉด BufferedReader๋‚ด๋ถ€ ๋ฒ„ํผ ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํผ์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค๋ฅธ ํฐ ๋ฌธ์ž ๋ฐฐ์—ด์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค.

์ด ํด๋ž˜์Šค ์—๋Š” ์†Œ์Šค ์ŠคํŠธ๋ฆผ์—์„œ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋Š” BufferedReader๋งค์šฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค . String readLine()์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ฝ๊ณ  ๊ทธ ๋‚ด์šฉ์„ ํ•œ ์ค„์”ฉ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

String src = "c:\\projects\\log.txt";

try(FileReader in = new FileReader(src);
BufferedReader reader = new BufferedReader(in))
{
   while (reader.ready())
   {
      String line = reader.readLine();
      System.out.println(line);
   }
}
๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค FileReader. ๋ฐ์ดํ„ฐ ์›๋ณธ์€ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค BufferedReader. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” FileReader.
ํŒ๋…๊ธฐ์— ์•„์ง ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ•œ
ํ•œ ๋ผ์ธ์„ ์ฝ์Šต๋‹ˆ๋‹ค.
๋ผ์ธ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ค‘์š”ํ•œ ์ :

์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆผ์„ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ close()๋ฉ”์„œ๋“œ๋Š” ๊ทธ์ค‘ ํ•˜๋‚˜์—์„œ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. close()ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์€ ์ตœ์ข… ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์—์„œ ํ˜ธ์ถœ๋  ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋“ฑ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค .



3. ์ฝ˜์†”์—์„œ ์ฝ๊ธฐ

๊ทธ๋ฆฌ๊ณ  ํ•œ ๊ฐ€์ง€ ๋” ํฅ๋ฏธ๋กœ์šด ์‚ฌ์‹ค์€ Scannerํด๋ž˜์Šค๊ฐ€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ด๊ธฐ๋„ ํ•œ ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ค‘๊ฐ„ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์— ์ง€๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค System.in.

๋‹ค์Œ์€ ์ฝ˜์†”์—์„œ ์ค„์„ ์ฝ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์Šค์บ๋„ˆ ํด๋ž˜์Šค BufferedReader ๋ฐ BufferedWriter ํด๋ž˜์Šค
InputStream stream = System.in;
Scanner console = new Scanner(stream);
String line = console.nextLine();
InputStream stream = System.in;
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader buff = new BufferedReader(reader);
String line = buff.readLine();

์šฐ๋ฆฌ ์นœ๊ตฌ๋Š” ํด๋ž˜์Šค ์˜ ์ •์  ๋ณ€์ˆ˜์— ์ง€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์ด๋ฆ„์ด ์ž…๋‹ˆ๋‹ค .System.ininSystemInputStreamin

๋”ฐ๋ผ์„œ ๊ฑฐ์˜ CodeGym์— ๋Œ€ํ•œ Java ์—ฐ๊ตฌ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ž‘์—…ํ•˜๊ณ  ๊ทธ๋กœ๋ถ€ํ„ฐ ์ฒด์ธ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๋‹น์‹ ์€ ๋” ์˜์‹์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.