[JAVA] 12 IO / 파일 처리 / 문자열 처리

[JAVA] 12 IO / 파일 처리 / 문자열 처리

입출력(IO)은 프로그램과 외부 세계가 데이터를 주고받는 방식이다. 자바에서는 콘솔, 파일, 문자열 처리까지 IO 개념을 통해 다룬다. 이번 글에서는 기본적인 IO 구조와 문자열 처리 방법을 정리한다.


1. IO란

IO(Input / Output)는 데이터의 입력과 출력을 의미한다. 입력은 프로그램 안으로 들어오는 데이터, 출력은 프로그램 밖으로 나가는 데이터다.

  • 입력(Input) : 키보드, 파일, 네트워크
  • 출력(Output) : 콘솔, 파일, 네트워크

2. 콘솔 입력 (Scanner)

import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String text = sc.next();

Scanner는 콘솔 입력을 간단하게 처리할 수 있다. 입력 타입에 따라 메서드가 다르다.


3. 콘솔 출력

System.out.println("출력");
System.out.print("출력");
System.out.printf("값: %d", 10);

println은 줄바꿈, print는 줄바꿈 없음, printf는 형식 지정 출력이다.


4. 파일 입력(FileInputStream)

import java.io.FileInputStream;
import java.io.IOException;

FileInputStream fis = new FileInputStream("test.txt");
int data;

while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}

fis.close();

파일에서 바이트 단위로 데이터를 읽는다. read()는 더 이상 읽을 값이 없으면 -1을 반환한다.


5. 파일 출력(FileOutputStream)

import java.io.FileOutputStream;

FileOutputStream fos = new FileOutputStream("out.txt");
fos.write('A');
fos.write('B');
fos.close();

파일이 존재하지 않으면 새로 생성된다.


6. 문자 스트림(FileReader / FileWriter)

import java.io.FileReader;
import java.io.FileWriter;

FileWriter writer = new FileWriter("text.txt");
writer.write("Hello Java");
writer.close();

FileReader reader = new FileReader("text.txt");
int ch;
while ((ch = reader.read()) != -1) {
    System.out.print((char) ch);
}
reader.close();

문자 기반 스트림은 문자열 처리에 적합하다.


7. try-with-resources

try (FileReader reader = new FileReader("text.txt")) {
    int ch;
    while ((ch = reader.read()) != -1) {
        System.out.print((char) ch);
    }
}

자동으로 자원을 닫아준다. IO 처리 시 권장되는 방식이다.


8. String의 문제점

String s = "A";
s = s + "B";
s = s + "C";

String은 불변 객체이므로, 문자열을 더할 때마다 새로운 객체가 생성된다.


9. StringBuilder

StringBuilder sb = new StringBuilder();
sb.append("A");
sb.append("B");
sb.append("C");

String result = sb.toString();

StringBuilder는 내부 값을 변경할 수 있어 문자열 누적 처리에 효율적이다.


10. StringBuffer

StringBuffer buffer = new StringBuffer();
buffer.append("Java");

StringBuffer는 동기화가 적용된 StringBuilder다. 단일 스레드 환경에서는 StringBuilder가 더 적합하다.


11. IO와 문자열 처리 정리

  • IO는 데이터 입출력을 담당한다.
  • 파일 IO는 스트림을 통해 처리한다.
  • 문자열 누적에는 StringBuilder를 사용한다.

정리

  • Scanner로 콘솔 입력을 처리할 수 있다.
  • 파일 IO는 예외 처리와 자원 관리가 중요하다.
  • String은 불변, StringBuilder는 가변이다.
  • IO와 문자열 처리는 자바 기본기의 마무리다.