๋ฐ˜์‘ํ˜•

 

1. Java ์ž…์ถœ๋ ฅ์ด๋ž€?

 

Java์˜ ์ž…์ถœ๋ ฅ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ด€์ ์œผ๋กœ ๋‚˜๋‰จ

 

  • ์ž…๋ ฅ(Input) : ์™ธ๋ถ€(ํ‚ค๋ณด๋“œ, ํŒŒ์ผ ๋“ฑ) -> ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€

  • ์ถœ๋ ฅ(Output) : ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ -> ์™ธ๋ถ€ (์ฝ˜์†”, ํŒŒ์ผ ๋“ฑ)

 

๊ตฌ๋ถ„ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ
๋Œ€ํ‘œ ํด๋ž˜์Šค InputStream, OutputStream Reader, Writer
์ฒ˜๋ฆฌ ๋‹จ์œ„ 1 byte (์ด๋ฏธ์ง€, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋“ฑ) 2 byte ๋ฌธ์ž (ํ…์ŠคํŠธ ์œ„์ฃผ)
์˜ˆ์‹œ BufferedInputStream ๋“ฑ BufferedReader ๋“ฑ

 

 

์œ„์™€ ๊ฐ™์ด ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ๋‹จ์œ„์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋จ

 

 

2. ํ‘œ์ค€ ์ž…์ถœ๋ ฅ (System.in, System.out)

 

ํ‘œ์ค€ ์ž…๋ ฅ

 

System.in  // InputStream (๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ)

 

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ์˜๋ฏธ

  • InputStream ์ด๋ฏ€๋กœ 1byte์”ฉ ์ฝ๊ณ  ๋ฌธ์ž ์ž…๋ ฅ์—” ์ ํ•ฉํ•˜์ง€ ์•Š์Œ

    -> ๊ทธ๋ž˜์„œ InputStreamReader๋‚˜ Scanner๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ž…๋ ฅ์œผ๋กœ ๋ณ€ํ™˜

 

ํ‘œ์ค€ ์ถœ๋ ฅ

 

System.out  // PrintStream (OutputStream ํ•˜์œ„ ํด๋ž˜์Šค)

 

  • ์ฝ˜์†”๋กœ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

  • PrintStream์€ print(), println(), printf() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•จ

  • ์ž๋™์œผ๋กœ flush() ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ์ฆ‰์‹œ ์ฝ˜์†”์— ์ถœ๋ ฅ๋จ

 

์ž…๋ ฅ ํด๋ž˜์Šค ์ •๋ฆฌ

 

Scanner (๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ž…๋ ฅ)

 

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.nextLine();

 

  • ๋‚ด๋ถ€์ ์œผ๋กœ InputStreamReader๋ฅผ ์‚ฌ์šฉ

  • ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜• ์ž…๋ ฅ ๊ฐ€๋Šฅ

  • Scanner๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ์„ ํŒŒ์‹ฑํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ํŒŒ์‹ฑ๋ณด๋‹ค ์—ฐ์‚ฐ๋Ÿ‰์ด ๋งŽ๊ณ  ๋А๋ฆผ

    -> nextInt()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋„ ๋‹จ์ˆœํžˆ ์ˆซ์ž๋ฅผ ์ฐพ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ "\\d+" ๊ฐ™์€ ์ •๊ทœ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ž์—ด์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ๋งค์นญํ•จ

 

BufferedReader (๋น ๋ฅธ ์ž…๋ ฅ)

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();

// System.in์€ InputStream ์ด๋ฏ€๋กœ, Reader๋กœ ๋ณ€ํ™˜ ํ›„ BufferedReader๋กœ ๊ฐ์Œˆ
// InputStream -> InputStreamReader (byte -> char) -> BufferedReader (๋ฒ„ํผ๋ง + ํŽธ์˜ ๊ธฐ๋Šฅ)

 

  • ๋ฒ„ํผ(๊ธฐ๋ณธ 8192 byte)์— ์ €์žฅ ํ›„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ž…๋ ฅ ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ฆ

  • ๋น ๋ฅด์ง€๋งŒ ๋ฌธ์ž์—ด ์ž…๋ ฅ๋งŒ ์ง€์›ํ•˜๊ณ  ์ˆซ์ž๋Š” Integer.parseInt()๊ฐ€ ํ•„์š”ํ•จ

 

Scanner๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์šด์˜์ฒด์ œ์— ์š”์ฒญํ•ด์„œ ํ•œ ๊ธ€์ž ํ•œ ๊ธ€์ž ์ฝ์–ด์˜ค์ง€๋งŒ
BufferedReader๋Š” ๋ฏธ๋ฆฌ ๋ฒ„ํผ(๊ธฐ๋ณธ 8192 byte)์— ์ซ™ ๋ฐ›์•„๋†“๊ณ , ๊ทธ ์•ˆ์—์„œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— I/O ํ˜ธ์ถœ ํšŸ์ˆ˜๊ฐ€ ์ ์Œ

 

IOException ์ฒ˜๋ฆฌ

BufferedReader ์™€ ๋ฐ‘์—์„œ ๋‚˜์˜ฌ BufferedWriter๋Š”  ๊ฐ๊ฐ java.io.Reader ์™€ java.io.Writer ๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ž„

 

ํ•˜์ง€๋งŒ, Java IO๋Š” Checked Exception ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋ฏ€๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•จ

(I/O ์ž‘์—…์€ ์–ธ์ œ๋“  ์‹คํŒจํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•จ)

 

๋”ฐ๋ผ์„œ, BufferedReader๋‚˜ BufferedWriter๋ฅผ ์‚ฌ์šฉํ• ๋• try catch๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€์— throws IOException์„ ๋ถ™์—ฌ์•ผํ•จ

 

StringTokenizer (๋น ๋ฅธ ํŒŒ์‹ฑ)

 

StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());

 

  • ํ•œ ์ค„ ์ž…๋ ฅ ํ›„ ๊ณต๋ฐฑ ๋‹จ์œ„๋กœ ๋น ๋ฅด๊ฒŒ ๋‚˜๋ˆ”

  • ์ •๊ทœ์‹ ์—†๋Š” ํ† ํฐ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋ฏ€๋กœ split() ๋ณด๋‹ค ์„ฑ๋Šฅ์ ์œผ๋กœ ์šฐ์ˆ˜ํ•จ

 

์ถœ๋ ฅ ํด๋ž˜์Šค ์ •๋ฆฌ

 

System.out (PrintStream)

 

System.out.println("์ถœ๋ ฅ");

 

  • ํŽธํ•˜๊ณ  ์ง๊ด€์ , ๋””๋ฒ„๊น… ์šฉ๋„๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋จ

  • ๋‚ด๋ถ€์ ์œผ๋กœ OutputStream ๊ธฐ๋ฐ˜

    -> System.out์€ PrintStream์ธ๋ฐ ์ด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ byte ๊ธฐ๋ฐ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(OutputStream)์„ ํ†ตํ•ด ๋™์ž‘ํ•จ

  • ์ฆ‰์‹œ flush ๋˜์–ด ๋А๋ฆด ์ˆ˜ ์žˆ์Œ 

    -> flush()๋Š” ๋ฒ„ํผ์— ์Œ“์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ•์ œ๋กœ ์ฆ‰์‹œ ์ถœ๋ ฅ ์žฅ์น˜(์ฝ˜์†”, ํŒŒ์ผ ๋“ฑ)๋กœ ๋ฐ€์–ด๋‚ด๋Š” ์ž‘์—…์œผ๋กœ ์‹œ์Šคํ…œ I/O ํ˜ธ์ถœ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๊ฒŒ๋จ
    (์ฝ˜์†” ์ถœ๋ ฅ์€ OS์— ์š”์ฒญํ•˜๋Š” ๋ฌด๊ฑฐ์šด ์ž‘์—…(system call) ์ด๋ผ, ์ถœ๋ ฅ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง)

 

BufferedWriter (๋น ๋ฅธ ์ถœ๋ ฅ)

 

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello BufferedWriter!");
bw.newLine();  // ์ค„ ๋ฐ”๊ฟˆ
bw.flush();    // ๋ฒ„ํผ์— ์Œ“์ธ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
bw.close();    // ์ŠคํŠธ๋ฆผ ๋‹ซ๊ธฐ (flush๋„ ํฌํ•จ)

 

  • ์ถœ๋ ฅ ๋‚ด์šฉ์„ ๋ฒ„ํผ์— ๋ชจ์•„ ๋‘์—ˆ๋‹ค๊ฐ€ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•จ

    -> ๋ฐ˜๋ณต ๋ฃจํ”„์—์„œ ๋งŽ์€ ์–‘์„ ์ถœ๋ ฅํ•  ๋•Œ ํ›จ์”ฌ ๋น ๋ฆ„

  • BufferedWriter๋Š” ๋‚ด๋ถ€ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์Œ

    -> close()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด, ์•„์ง ์ถœ๋ ฅ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Œ
    (close๋Š” ๋ฒ„ํผ์— ๋‚จ์€ ๋ฐ์ดํ„ฐ๋ฅผ flush ํ•˜๊ณ  ํŒŒ์ผ ํ•ธ๋“ค, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•จ)

 

์ •๋ฆฌ

 

๋„๊ตฌ ์ž…๋ ฅ ์†๋„ ์ถœ๋ ฅ ์†๋„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํŠน์ง•
Scanner ์ž…๋ ฅ ๋А๋ฆผ X ํ•„์š” ์—†์Œ ํŽธํ•˜์ง€๋งŒ ๋А๋ฆผ
BufferedReader ๋น ๋ฆ„ X ํ•„์š”ํ•จ ๋น ๋ฅธ ์ž…๋ ฅ
System.out X ๋А๋ฆผ ํ•„์š” ์—†์Œ ์ฆ‰์‹œ flush
BufferedWriter X ๋น ๋ฆ„ ํ•„์š”ํ•จ ๋ฒ„ํผ ์ถœ๋ ฅ

 

๋ฐ˜์‘ํ˜•