🧠 TIL - Java 17일차: 문자열 클래스, 입출력(IO), 파일 처리
오늘은 자바의 대표적인 문자열 클래스(String, StringBuilder, StringBuffer)와
입출력(IO) 스트림, File 클래스를 학습했습니다.
각 클래스와 스트림의 특징, 구조, 사용 목적을 비교하며 실제 예제를 통해 실습도 진행했습니다.
1️⃣ String, StringBuilder, StringBuffer 비교
구분 String StringBuilder StringBuffer
변경 가능 여부 ❌ 불변 (immutable) ✅ 가변 (mutable) ✅ 가변 (mutable)
스레드 안전성 ❌ 비동기 ❌ 비동기 ✅ 동기 (Thread-safe)
사용 환경 문자열이 자주 변경되지 않는 경우 단일 스레드 환경에서 문자열 자주 변경 멀티 스레드 환경에서 문자열 자주 변경
🔹 String 특징
불변 객체: 내용 변경 시 매번 새로운 객체 생성
문자열 리터럴은 String Constant Pool에 저장되어 중복 제거
java
복사
편집
String str1 = "hello";
String str2 = "hello"; // 같은 객체
String str3 = new String("hello"); // 새로운 객체
🔹 StringBuilder 특징
가변 객체
내부에 char 배열을 사용하여 문자열을 동적으로 관리
비동기 처리, 성능 우수
java
복사
편집
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb); // Hello World
🔹 StringBuffer 특징
StringBuilder와 유사하나, 모든 메서드가 synchronized → 스레드 안전
멀티 스레드 환경에서 사용 적합
2️⃣ 입출력(IO) 스트림
스트림(Stream): 단방향 데이터 흐름
자바는 바이트 기반과 문자 기반 스트림을 제공
📦 2.1 바이트 기반 스트림
입출력 방향 클래스
입력(Input) InputStream, FileInputStream, BufferedInputStream, DataInputStream
출력(Output) OutputStream, FileOutputStream, BufferedOutputStream, DataOutputStream
✅ 모든 종류의 파일 처리 가능 (텍스트, 이미지 등)
📝 2.2 문자 기반 스트림
입출력 방향 클래스
입력(Input) Reader, FileReader, BufferedReader, InputStreamReader
출력(Output) Writer, FileWriter, BufferedWriter, OutputStreamWriter
✅ 텍스트 파일에 특화, 문자 단위 처리
🧩 3️⃣ 보조 스트림
기반 스트림에 기능을 추가하는 스트림 (단독 사용 불가)
목적 클래스
성능 향상 BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream
기본 타입 입출력 DataInputStream, DataOutputStream
객체 입출력 ObjectInputStream, ObjectOutputStream
문자 변환 InputStreamReader, OutputStreamWriter
📁 4️⃣ File 클래스
파일 및 디렉토리를 추상화한 클래스
java
복사
편집
File file = new File("test.txt");
주요 메서드
메서드 설명
createNewFile() 새 파일 생성
mkdir() 새 디렉토리 생성
delete() 파일/디렉토리 삭제
getName() 이름 반환
length() 파일 크기 반환
lastModified() 수정 날짜 반환
🧪 5️⃣ 실습 예제
📘 5.1 파일 읽기
java
복사
편집
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
📝 5.2 파일 쓰기
java
복사
편집
try (BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"))) {
bw.write("Hello, world!");
} catch (IOException e) {
e.printStackTrace();
}
📊 5.3 파일 정보 조회
java
복사
편집
File file = new File("test.txt");
System.out.println("크기: " + file.length());
System.out.println("수정일: " + new Date(file.lastModified()));
💡 정리
문자열 연산이 많은 경우 StringBuilder 또는 StringBuffer를 사용하자.
IO 스트림은 입력/출력 방식과 데이터 단위(바이트 vs 문자)에 따라 클래스를 선택해야 한다.
File 클래스는 파일/디렉토리 조작에 유용하며, 스트림과 함께 자주 사용된다.