입출력
콘솔 입력
- 입출력 방식 중 콘솔 입력 방법
- 자바에서 콘솔 입력은 주로 Scanner 클래스를 사용하여 처리한다. Scanner 클래스는 java.util 패키지에 있으며, 다양한 종류의 입력(문자열, 정수, 실수 등)을 처리할 수 있다.
import java.util.Scanner;
public class ConsoleInputExample {
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("Name: " + name + ", Age: " + age);
}
}
콘솔 출력
- 입출력 방식 중 콘솔 출력 방법
- 콘솔 출력은 System.out.println, System.out.print, System.out.printf 등의 메서드를 사용하여 처리한다. 이들은 각각 줄 바꿈을 포함하는 출력, 줄 바꿈 없이 그대로 출력, 서식화된 출력을 제공한다.
public class ConsoleOutputExample {
public static void main(String[] args) {
String name = "Alice";
int age = 25;
System.out.println("Name: " + name + ", Age: " + age); // 줄 바꿈을 포함한 출력
System.out.print("This is printed on the same line."); // 줄 바꿈 없는 출력
System.out.printf("Name: %s, Age: %d\n", name, age); // 서식화된 출력
}
}
파일 입력
- 입출력 방식 중 파일로부터 입력받는 방법
- 파일로부터 데이터를 읽기 위해 FileReader, BufferedReader, Scanner 등을 사용할 수 있다. BufferedReader와 FileReader 조합은 대용량의 데이터를 효율적으로 읽는 데 적합하다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileInputExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
파일 출력
- 입출력 방식 중 파일로 출력하는 방법
- 파일에 데이터를 쓰기 위해 FileWriter, BufferedWriter 등을 사용한다. BufferedWriter는 데이터를 버퍼에 모아두었다가 일정량이 되면 한 번에 파일에 쓰므로, 대용량 데이터를 다룰 때 효율적이다.
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileOutputExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Hello, World!");
writer.newLine();
writer.write("This is a file output example.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
💡 실제 코딩테스트에선 BufferedReader, BufferedWriter, InputStreamReader, OutputStreamWriter을 사용할 예정이다.
BufferedReader, BufferedWriter가 대량의 데이터를 처리하거나 더 세밀한 입력 및 출력 제어가 필요한 경우 유용하기 때문이다. 반면, Scanner 클래스는 사용하기 쉽고 직관적인 API를 제공하지만, 대량의 데이터 처리에 있어서는 BufferedReader와 BufferedWriter보다 성능이 떨어질 수 있기 때문에 사용하지 않는다.
+ InputStreamReader, OutputStreamWriter 코딩테스트에서 콘솔 입출력을 사용하기 위함이다.
1. 성능: BfferedReader와 BufferedWriter는 내부 버퍼링을 통해 입출력 성능을 향상시킨다. 이들은 데이터를 메모리에 임시로 저장했다가 일정량이 모이면 한 번에 처리한다. 이는 특히 대량의 데이터를 읽거나 쓸 때 유용하다.
2. 메모리 효율성: 큰 크기의 데이터를 다룰 때 Scanner보다 BufferedReader가 메모리를 더 효율적으로 사용한다.
3. 세밀한 제어: BufferedReader는 문자열로만 데이터를 읽어들이므로, 사용자가 파싱을 직접 제어할 수 있다. 이는 때때로 더 복잡할 수 있지만, 더 세밀한 입력 처리가 가능하다.
--> 코딩 테스트에선 시간 제한이 중요한 요소이기 때문에 대량의 데이터를 빠르게 처리할 수 있는 BufferedReader, BufferedWriter를 사용하는 것!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
public class ConsoleIOExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))) {
String line;
System.out.println("Enter text (type 'exit' to finish):");
while (!(line = reader.readLine()).equalsIgnoreCase("exit")) {
String uppercased = line.toUpperCase();
writer.write(uppercased);
writer.newLine();
writer.flush(); // 즉시 출력을 위해 버퍼를 비웁니다.
}
} catch (IOException e) {
e.printStackTrace();
}
}
}