[Java] 6. String 처리 성능 비교

김민주·2025년 3월 22일

Programming Language

목록 보기
10/12
post-thumbnail

1. 왜 문자열 처리도 성능 차이가 날까?

String은 불변 객체 (immutable)로 값이 바뀌면 → 새로 생성됨 → 메모리 낭비 → 성능 나빠짐
StringBuilder, StringBuffer는 가변 객체 → 수정에 유리

2. 핵심 비교

구분StringStringBuilderStringBuffer
특성❌ 불변✅ 가변✅ 가변 (멀티스레드용)
속도🐢 느림⚡가장 빠름🏃‍♀️‍➡️ 상대적으로 느림 (동기화 비용)
동기화
추천 환경불변 문자단일 스레드멀티 스레드

3. 예시 코드

📌 String (불변)

String str = "Hello";
str += " World";  		  // 내부적으로 새로운 String 객체 생성
System.out.println(str);  // Hello World

+ 연산할 때마다 새 객체 생성 ➔ 문자열 많아지면 시간 폭탄💣

📌 StringBuilder (가변, 단일 스레드 최강)

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World");
System.out.println(sb.toString());  // Hello World

기존 객체 안에서 이어 붙임 ➔ 속도 훨씬 빠름!

📌 StringBuffer (가변, 멀티 스레드용)

StringBuffer sbf = new StringBuffer();
sbf.append("Hello");
sbf.append(" World");
System.out.println(sbf.toString());  // Hello World

➔ StringBuilder랑 비슷하지만, synchronized로 멀티스레드 안전!

💠한 줄 암기

String = 읽기 전용
StringBuilder = 수정 많은 단일 스레드
StringBuffer = 수정 많은 멀티 스레드

+) 알고리즘에서 출력할 땐 StringBuilder 쓰는 게 시간 초과 방지

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
    sb.append("숫자: ").append(i).append("\n");
}
System.out.print(sb);
public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        // 문자열 중간에 삽입
        sb.insert(5, " World");  // "Hello" 뒤에 " World" 추가
        System.out.println(sb);  // 출력: Hello World

        // 일부 삭제
        sb.delete(5, 11);        // " World" 삭제
        System.out.println(sb);  // 출력: Hello

        // 문자열 뒤집기
        sb.reverse();
        System.out.println(sb);  // 출력: olleH
    }
}
profile
낭비하지마 네 시간은 은행🐰

0개의 댓글