Java: StringBuilder 클래스


1. 개요

StringBuilder는 Java에서 가변(mutable) 문자열을 처리하기 위한 클래스이다.

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

2. 주요 특징

항목

설명

가변성

✅ 내부 문자열을 직접 수정 (객체 생성 없음)

동기화

❌ 지원하지 않음 (→ 단일 스레드에서만 안전)

성능

StringBuffer보다 빠름

내부 구조

char[] 배열을 이용한 버퍼

기본 크기

초기 용량 16 → 필요 시 자동 확장됨


3. 생성자 종류

StringBuilder sb1 = new StringBuilder();               // 초기 버퍼 크기 16
StringBuilder sb2 = new StringBuilder(50);             // 초기 버퍼 크기 지정
StringBuilder sb3 = new StringBuilder("Hello");        // 초기 문자열 지정

4. 주요 메서드 정리

메서드

설명

append(String)

문자열 끝에 추가

insert(int, String)

특정 위치에 문자열 삽입

delete(int, int)

지정 구간 문자 삭제

deleteCharAt(int)

지정 인덱스 문자 삭제

replace(int, int, String)

지정 구간을 문자열로 대체

reverse()

문자열을 뒤집음

toString()

최종 문자열로 변환 (String으로 반환)

length()

현재 문자열 길이 반환

capacity()

내부 버퍼의 총 용량 반환

ensureCapacity(int)

최소 버퍼 크기 확보

setCharAt(int, char)

특정 위치 문자 변경

charAt(int)

특정 인덱스 문자 반환


5. 사용 예제

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        sb.append(" World");                     // Hello World
        sb.insert(5, ",");                       // Hello, World
        sb.replace(0, 5, "Hi");                  // Hi, World
        sb.delete(3, 4);                         // Hi World
        sb.reverse();                            // dlroW iH

        System.out.println(sb.toString());       // 출력: dlroW iH
    }
}

6. 성능 비교: String vs StringBuilder

// 느린 방식: String
String str = "";
for (int i = 0; i < 10000; i++) {
    str += "a";  // 매 반복마다 새 객체 생성
}

// 빠른 방식: StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append("a");  // 동일 객체 안에서 처리
}

StringBuilder는 수천 배 빠를 수 있으며 GC 부담도 낮다.


7. 주의 사항


8. 요약

항목

StringBuilder

불변성

❌ 가변

스레드 안전성

❌ 비동기 (단일 스레드만 안전)

성능

✅ 매우 빠름

용도

반복적인 문자열 연결/수정에 최적

권장 사용 환경

루프 내 문자열 처리, 대용량 로그 조립 등





Revision #4
Created 20 May 2025 04:10:23 by Dain
Updated 26 May 2025 15:05:31 by Dain