JAVA

자바 입출력(IO) 쉽게 이해하기

EunaSon 2025. 3. 5. 06:48

1. 자바 입출력이란?

입출력(IO, Input/Output)은 프로그램이 외부와 데이터를 주고받는 기능을 의미한다. 자바에서는 다양한 입출력 클래스를 제공하며, 파일, 키보드 입력, 네트워크 등을 통해 데이터를 주고받을 수 있다.

2. 입출력 스트림(Stream)의 개념

스트림(Stream)은 데이터를 연속적으로 읽거나 쓰는 데 사용된다. 자바의 입출력은 대부분 스트림을 기반으로 동작한다.

2.1 스트림의 종류

  • 바이트 스트림 (Byte Stream): 바이트 단위로 데이터를 처리 (예: InputStream, OutputStream)
  • 문자 스트림 (Character Stream): 문자 단위로 데이터를 처리 (예: Reader, Writer)

3. 파일 입출력

자바에서는 java.io 패키지를 활용하여 파일을 읽고 쓸 수 있다.

3.1 파일 읽기 (FileReader)

import java.io.FileReader;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        // example.txt 파일을 읽기 위한 FileReader 객체 생성
        try (FileReader reader = new FileReader("example.txt")) {
            int ch;
            // 파일 끝까지 한 문자씩 읽어서 출력
            while ((ch = reader.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
        }
    }
}

3.2 파일 쓰기 (FileWriter)

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        // example.txt 파일을 생성하고 문자열을 저장하는 FileWriter 객체 생성
        try (FileWriter writer = new FileWriter("example.txt")) {
            writer.write("Hello, Java IO!"); // 파일에 문자열 저장
        } catch (IOException e) {
            e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
        }
    }
}

4. 버퍼를 활용한 효율적인 입출력

입출력 성능을 높이기 위해 버퍼를 사용할 수 있다.

4.1 BufferedReader로 파일 읽기

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReadExample {
    public static void main(String[] args) {
        // BufferedReader를 사용하여 파일을 효율적으로 읽음
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            // 한 줄씩 읽어서 출력
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
        }
    }
}

4.2 BufferedWriter로 파일 쓰기

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriteExample {
    public static void main(String[] args) {
        // BufferedWriter를 사용하여 파일에 데이터를 효율적으로 저장
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
            bw.write("Buffered Writer Example"); // 파일에 문자열 저장
            bw.newLine(); // 줄 바꿈
            bw.write("Using Java IO");
        } catch (IOException e) {
            e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
        }
    }
}

5. Scanner를 활용한 콘솔 입력

키보드 입력을 받을 때 Scanner를 사용할 수 있다.

import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        // Scanner 객체를 생성하여 콘솔 입력을 받음
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = scanner.nextLine(); // 사용자 입력 받기
        System.out.println("Hello, " + name + "!"); // 입력값 출력
        scanner.close(); // Scanner 닫기
    }
}

6. 파일 입출력 시 주의할 점

  • 입출력 연산은 IOException을 발생시킬 수 있으므로 반드시 예외 처리를 해야 한다.
  • 파일을 다 사용한 후에는 close()를 호출하거나 try-with-resources를 사용해 자동으로 닫아야 한다.
  • 버퍼를 사용하면 입출력 속도를 향상시킬 수 있다.

7. 마치며

이번 글에서는 자바 입출력의 기본 개념과 파일 입출력 방법을 알아보았다. 기본적인 FileReader, FileWriter부터 BufferedReader, BufferedWriter, 그리고 Scanner까지 다양한 입출력 방법을 살펴보았다. 실제 프로젝트에서 파일을 다룰 때 활용하면 유용할 것이다.

추후에는 **NIO(새로운 입출력 API)**와 네트워크 입출력도 다뤄보겠다.