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 | ๋น ๋ฆ | ํ์ํจ | ๋ฒํผ ์ถ๋ ฅ |
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐธ์กฐ ์ง์ญ์ฑ์ ์๋ฆฌ๋? (0) | 2025.06.22 |
---|---|
Go(Golang)์ด๋? (0) | 2025.06.06 |
Java Collections Framework ์์๋ณด๊ธฐ (0) | 2025.05.29 |
Kotlin(์ฝํ๋ฆฐ)์ด๋? (0) | 2025.05.21 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๊ตฌ๋ฌธ๊ณผ ๊ตฌํ ๊ธฐ๋ฒ (2) | 2025.04.19 |
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 | ๋น ๋ฆ | ํ์ํจ | ๋ฒํผ ์ถ๋ ฅ |
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐธ์กฐ ์ง์ญ์ฑ์ ์๋ฆฌ๋? (0) | 2025.06.22 |
---|---|
Go(Golang)์ด๋? (0) | 2025.06.06 |
Java Collections Framework ์์๋ณด๊ธฐ (0) | 2025.05.29 |
Kotlin(์ฝํ๋ฆฐ)์ด๋? (0) | 2025.05.21 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ์ธ์ด์ ๊ตฌ๋ฌธ๊ณผ ๊ตฌํ ๊ธฐ๋ฒ (2) | 2025.04.19 |