JAVA

입출력

오승미 2023. 11. 21. 10:10

콘솔 입력

- 입출력 방식 중 콘솔 입력 방법

- 자바에서 콘솔 입력은 주로 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();
        }
    }
}