๐ป Language/Java : ์๋ฐ
[Java] ์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ํ Java ์ ์ถ๋ ฅ ํจ์
mxnxeonx
2024. 11. 15. 19:25
728x90
728x90
์ ์ถ๋ ฅ ํจ์
- Java์ ์ ์ถ๋ ฅ(IO; Input/Output) ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ฃผ์ ํจ์์ ํด๋์ค๋ Java์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ java.io์ java.nio ํจํค์ง์ ํฌํจ๋์ด ์๋ค.
- ์
์ถ๋ ฅ์ ํฌ๊ฒ ์ฝ์ ์
์ถ๋ ฅ, ํ์ผ ์
์ถ๋ ฅ, ๋คํธ์ํฌ ์
์ถ๋ ฅ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก System.out.println(""), Scanner๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ฝ๋ฉ ํ ์คํธ์ ์ฌ์ฉ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋จ์ ์ด ๋ฐ์ํ์ฌ, ๋ค์ํ ์ ์ถ๋ ฅ ํจ์๋ฅผ ๋๊ณ ์ํฉ์ ๋ฐ๋ผ ์ฌ์ฉํ๋ค.
1) Scanner
[ ์ฅ์ ]
- java.util.Scanner ํด๋์ค : ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ฝ์ ์ ์ถ๋ ฅ ํด๋์ค๋ก, ์ด๋ณด์๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ
- nextInt, nextDouble, nextLine ๋ฑ ๋ค์ํ ์ ๋ ฅ ํ์ ์ ์ฒ๋ฆฌํ ์ ์์
- ์ ๋ ฅ์ด ์์์น ๋ชปํ ๋ฐ์ดํฐ ํ์ ์ธ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋์ง๋ ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ์ง์
[ ๋จ์ ]
- ๋๋ ๋ฐ์ดํฐ ์ ๋ ฅ์ ์๋๊ฐ ๋๋ฆผ : next(), nextLine() ๋ฑ์ ํธ์ถํ ๋๋ง๋ค ๋ด๋ถ์ ์ผ๋ก ํ์ฑ ์์ ์ด ์ํ๋จ
- nextInt()์ nextLine() ํผ์ฉ์ ์ค๋ฐ๊ฟ ๋ฌธ์๊ฐ ๋จ์ ์ถ๊ฐ ์ ๋ ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
[ ์ฝ๋ ]
- Scanner scanner = new Scanner(System.in); → Scanner ๊ฐ์ฒด ์ ์ธ
- String name = scanner.nextLine(); → name ๋ณ์์ ๋ฌธ์์ด ์ ๋ ฅ
- int age = scanner.nextInt(); → age ๋ณ์์ ์ ์ ์ ๋ ฅ
- scanner.close(); → ์ ๋ ฅ ์ข ๋ฃ
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine(); // ๋ฌธ์์ด ์
๋ ฅ
System.out.print("Enter your age: ");
int age = scanner.nextInt(); // ์ ์ ์
๋ ฅ
System.out.println("Hello, " + name + ". You are " + age + " years old.");
scanner.close(); // ์ฌ์ฉ ํ ๋ซ์์ค๋๋ค.
}
}
2) BufferedReader (+InputStreamReader)
[ ์ฅ์ ]
- ๋๋ ์ ๋ ฅ์ Scanner๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋
- ๋ด๋ถ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ถ๋ ฅ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์
- ๋๋ ์ ๋ ฅ ์ฒ๋ฆฌ์ ์ ํฉํ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ์ ํฉ
[ ๋จ์ ]
- ๋ชจ๋ ์ ๋ ฅ์ด ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ์ง์ ๋ฐ์ดํฐ ํ์ ์ ๋ณํํด์ผ ํจ (Integer.parseInt() ์ฌ์ฉ)
- IOException์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฑ Scanner์ ๋นํด ์ฌ์ฉ๋ฒ์ด ๋ณต์ก
[ ์ฝ๋ ]
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); → ๊ฐ์ฒด ์ ์ธ
- String line = reader.readLine(); → ํ ์ค ์ ๋ ฅ
- int number = Integer.parseInt(reader.readLine()); → ์ ์ ์ ๋ ฅ (๋ณํ)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine(); // ํ ์ค ์
๋ ฅ๋ฐ๊ธฐ
int number = Integer.parseInt(reader.readLine()); // ์ ์ ์
๋ ฅ๋ฐ๊ธฐ
3) StringTokenizer
[ ์ฅ์ ]
- ๋ฌธ์์ด์ ํน์ ๊ตฌ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ํฐํ(ํ์ฑ)ํ๋ ๋ฐ ์ฌ์ฉ
- BufferedReader๋ ์ค ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ ํฉํ์ง๋ง, ๊ตฌ๋ถ์ ๋จ์๋ก ์ฌ๋ผ์ด์ฑํ๋ ๋ฐ์๋ ๋น๊ต์ ์ ํฉํ์ง ์์
- ์ ์ถ๋ ฅ ์์ ์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉฐ, ์ด๋ฏธ ์ ๊ณต๋ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ์์ ์ ์ํ
[ ๋จ์ ]
- ์ ์ถ๋ ฅ ์์ ์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉฐ, ์ด๋ฏธ ์ ๊ณต๋ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ์์ ์ ์ํ
[ ์ฝ๋ ]
- BufferedReader๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , StringTokenizer๋ก ๋ฌธ์์ด์ ํ์ฑํ์ฌ ๊ฐ๊ฐ์ ๊ฐ์ ์ ํ์ฉํ ์ ์์
- tokenizer.countTokens() : ํ ํฐ์ ๊ฐ์๋ฅผ return
- tokenizer.nextToken() : ๋ค์ ํ ํฐ์ return
- tokenizer.hasMoreTokens() : ๋ค์ ํ ํฐ์ด ์กด์ฌํ๋์ง t/f return
// ํ์ผ์์ ์ซ์๋ฅผ ์ฝ์ด ํฉ๊ณ๋ฅผ ๊ตฌํ๋ ์์ ์ฝ๋
import java.io.*;
import java.util.StringTokenizer;
public class FastInputExample {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokenizer;
String line = reader.readLine(); // ํ ์ค ์ฝ๊ธฐ
tokenizer = new StringTokenizer(line, " "); // ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ํ ํฐํ
int sum = 0;
while (tokenizer.hasMoreTokens()) {
sum += Integer.parseInt(tokenizer.nextToken());
}
System.out.println("Sum: " + sum);
}
}
4) BufferedWriter
[ ์ฅ์ ]
- ๋๋ ์ถ๋ ฅ์ System.out๋ณด๋ค ๋น ๋ฅด๊ฒ ์ถ๋ ฅ ๊ฐ๋ฅ
- ์ถ๋ ฅ ๋ด์ฉ์ ๋ฒํผ์ ์์ ํ ๋ฒ์ ์ถ๋ ฅํ์ฌ ์ฑ๋ฅ์ด ํฅ์๋จ
[ ๋จ์ ]
- flush()์ close()๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ ๋ฑ ์ฝ๋๊ฐ ๋ณต์กํด์ง
- BufferedWriter๋ ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ(buffer)๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ค. ๋๋ฌธ์ ์ถ๋ ฅ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ์ฅ์น(ํ๋ฉด, ํ์ผ ๋ฑ)๋ก ๋ณด๋ด๊ธฐ ์ํด ํน์ ์์ ์์ ๋ฒํผ๋ฅผ ๋น์ฐ๋ ์์ ์ด ํ์ํ๋ค.
๋๋ณด๊ธฐ
flush()
- ๋ฒํผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์ถ๋ ฅ ์ฅ์น๋ก ๋ด๋ณด๋
- ๋ฐ์ดํฐ๋ฅผ ์ค๊ฐ์ ๊ฐ์ ๋ก ์ถ๋ ฅํ๊ณ ์ถ๊ฑฐ๋, ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ๋ฒํผ๋ฅผ ๋น์์ผ ํ๋ ์ํฉ์์ ์ฌ์ฉ
- ex) ๋คํธ์ํฌ ์์ผ์ด๋ ๋ก๊ทธ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ธฐ๋กํด์ผ ํ๋ ๊ฒฝ์ฐ flush() ํธ์ถ
- ๋ฒํผ๊ฐ ๋น์์ง๊ณ , ๋ฒํผ์ ์์ธ ๋ฐ์ดํฐ๊ฐ ๋์ ์ถ๋ ฅ ์ฅ์น(ํ์ผ, ์ฝ์)๋ก ์ ์ก๋จ
- ์ดํ ๋ฒํผ๋ ๋น์ด ์์ผ๋ฏ๋ก ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์
close()
- ๋จ์ ๋ฒํผ๋ฅผ ์๋์ผ๋ก flush()ํ ํ, ์คํธ๋ฆผ์ ๋ซ์(๋ฆฌ์์ค ํด์ )ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์ง
- ๋ชจ๋ ์์ ์ด ๋๋ ํ, ์คํธ๋ฆผ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๋ ํธ์ถ
- ์คํธ๋ฆผ์ ๋ซ์ง ์์ผ๋ฉด ์์ ๋์(resource leak)๊ฐ ๋ฐ์ํ ์ ์์
- ๋ด๋ถ์ ์ผ๋ก flush()๋ฅผ ํธ์ถํ์ฌ ๋จ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ๊ณ ์คํธ๋ฆผ ๋ฆฌ์์ค๋ฅผ ์์คํ
์ ๋ฐํํ๋ ๋ฐฉ์.
flush()์ close()๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ์ด์ ?
close() ํจ์์ ๋ด๋ถ์ ์ผ๋ก flush() ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง๋ง, ์ฝ๋ ์์๋ฅผ ์ดํด ๋ณด๋ฉด flush() ํจ์๋ฅผ ํธ์ถํ ๋ค close() ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. close()๋ง ํธ์ถํด๋ ๋๋ ๊ฒฝ์ฐ๊ฐ์๋ฐ ์ flush() ํจ์๋ฅผ ํธ์ถํ๊ณ ์์๊น?
- ์์ ํ ๋ฐ์ดํฐ ์ ์ก ๋ณด์ฅ : close()๋ง ํธ์ถํ์ ๋ ์์ธ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์คํธ๋ฆผ์ด ๋ซํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์์. flush()๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๋ฉด, ์คํธ๋ฆผ์ ๋ซ๊ธฐ ์ ๋ฐ์ดํฐ๊ฐ ์์ ํ ์ถ๋ ฅ ์ฅ์น๋ก ์ ์ก๋์๋์ง ๋ณด์ฅํ ์ ์์
- ์ค๊ฐ ์ถ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ : ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ์ ์กํ๋ ์ค๊ฐ์ ํ์ฌ๊น์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- ๋ช ํํ ์ฝ๋ ๊ตฌ์กฐ : flush() ํธ์ถ ์์ ์ ๋ช ํํ ํ์ฌ ์ฝ๋์ ํ๋ฆ์ ๋ ์ดํดํ๊ธฐ ์ฝ๋๋ก ํจ. ๋ฒํผ ๋น์ฐ๊ธฐ ์์ ์ ๋ช ํํ๊ฒ ํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ธ์ ์ถ๋ ฅ๋์๋์ง ์์ํ ์ ์๊ฒ ํจ
- close() ํธ์ถ ์คํจ ๋๋น : ์ผ๋ถ ์ํฉ์์ ์คํธ๋ฆผ์ ๋ซ๊ธฐ ์ ์์ธ๋ก ์ธํด close()๊ฐ ํธ์ถ๋์ง ์์ ์ ์์. ์ด๋ฐ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์์ด๋ฒ๋ฆด ์ํ์ด ์์ผ๋ฏ๋ก flush()๋ฅผ ๋ฏธ๋ฆฌ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ค ๋ซ๋ ๊ฒ์ด ์์ ํจ
- ๋คํธ์ํฌ์ ๊ฐ์ ์ค์๊ฐ ์ถ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ
- ์ผ๊ด๋ ์ต๊ด ๋ฐ ์ ์ง๋ณด์
- IOException์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฑ ์ฌ์ฉ๋ฒ์ด ๋ณต์ก
[ ์ฝ๋ ]
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); → ๊ฐ์ฒด ์ ์ธ
- writer.write("Hello, World!\n"); → ("") ๋ด๋ถ์ ๊ฐ์ ์ถ๋ ฅ
- writer.flush(); → ๋ฒํผ๋ฅผ ๋น์ฐ๊ณ , ๋ฒํผ์ ์์ธ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
- writer.close(); → ๋ฒํผ๋ฅผ flushํ๊ณ , ์คํธ๋ฆผ์ ์ข ๋ฃ
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.write("Hello, World!\n"); // ๋ฌธ์์ด ์ถ๋ ฅ
writer.flush(); // ์ถ๋ ฅ ๋ฒํผ ๋น์ฐ๊ธฐ
writer.close(); // ์คํธ๋ฆผ ๋ซ๊ธฐ
5) StringBuilder
[ ์ฅ์ ]
- ๋ฐ๋ณต๋ฌธ์์ ๋ฌธ์์ด์ ๋์ ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋์์ ํฐ ์ด์
- ๋ณต์กํ ์ถ๋ ฅ ๋ก์ง์ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ ๊ฐ๋ฅ
[ ๋จ์ ]
- ์
์ถ๋ ฅ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด BufferedWriter๊ณผ ํจ๊ป ์ฌ์ฉํ๋๋ฐ, StringBuilder ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ๋ง๋ค์ด์ผ ํ๋ ๋จ์ ์ด ๋ฐ์
- StringBuilder๋ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ์กฐ์ํ๊ธฐ ์ํ ํด๋์ค๋ก, ๋ฐ๋ณต์ ์ผ๋ก ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋ ๋ฌธ์์ด์ ๋ถ๋ณ์ฑ์ ๊ฐ์ง String ๊ฐ์ฒด๋ณด๋ค ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ผ๋ก ์กฐ์ํ ์ ์๋ค. ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ BufferedWriter ํด๋์ค์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ์ฅ์น๋ก ์ ์กํด์ผ ํ๋ค.
[ ์ฝ๋ ]
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); → ๊ฐ์ฒด ์ ์ธ
- StringBuilder sb = new StringBuilder(); → ๊ฐ์ฒด ์ ์ธ
- sb.append("Line 1").append("\n"); → 1๋ฒ์งธ ๋ผ์ธ ์ถ๊ฐ
- sb.append("Line 2").append("\n"); → 2๋ฒ์งธ ๋ผ์ธ ์ถ๊ฐ
- writer.write(sb.toString()); → ์ถ๋ ฅ (StringBuilder๋ String ํ์ ์ด ์๋๋ฏ๋ก ๋ฐ๋์ toString ํจ์๋ก ๋ฌธ์์ด ๋ณํ ํ์)
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
sb.append("Line 1").append("\n");
sb.append("Line 2").append("\n");
writer.write(sb.toString());
writer.flush();
writer.close();
์ด์ ๋ฆฌ
๊ฐ๋จํ ๋ฐ์ดํฐ ์ ๋ ฅ | Scanner | ์ฝ๋๊ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ |
๋๋์ ๋ฐ์ดํฐ ์ ๋ ฅ/์ถ๋ ฅ | BufferedReader + BufferedWriter | ๋น ๋ฅด๊ณ ํจ์จ์ |
๋ฌธ์์ด ๋ฐ๋ณต ์ถ๋ ฅ ์ฒ๋ฆฌ | BufferedWriter + StringBuilder | ๋ฐ๋ณต ์์ ์์ ์ฑ๋ฅ, ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ |
- ๋๋ ์ ๋ ฅ/์ถ๋ ฅ์ ๊ฒฝ์ฐ ํญ์ BufferReader์ BufferedWriter๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ
- ๋ฐ๋ณต์ ์ผ๋ก ๋ฌธ์์ด์ ์ถ๋ ฅํด์ผ ํ ๊ฒฝ์ฐ StringBuilder๋ฅผ ์ ๊ทน ํ์ฉ
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ, BufferReader๋ก ๋ฐ์ ํ ์ฆ์ ๋ณํ(Integer.parseInt)ํ์ฌ ์ฌ์ฉ
- ์ผ๋ถ ํ๋ซํผ์ ํน์ ์ ์ถ๋ ฅ ๋ฐฉ์์ ๊ถ์ฅํ๋ฏ๋ก, ์ฌ์ฉ ์ ํ ์คํธ ํ๊ฒฝ์ ํ์ธ
728x90
320x100