Skip to main content

Java: StringBuilder 클래스


1. 개요

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

  • java.lang 패키지에 포함되어 있으며 import 없이 사용 가능
  • 문자열을 반복적으로 추가/삭제/수정할 때 매우 유용
  • 내부적으로 char[] 버퍼를 사용하여 객체 생성 없이 문자열을 조작함
  • StringBuffer와 기능은 거의 동일하지만, 동기화를 지원하지 않아 더 빠름
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. 주의 사항

  • ❗ 멀티스레드 환경에서는 StringBuilder스레드 안전하지 않음
    • → 이 경우 StringBuffer 사용
  • 반복 수정이 없고 단순한 문자열만 다룬다면 String 사용이 더 직관적일 수 있음

8. 요약

항목

StringBuilder

불변성

❌ 가변

스레드 안전성

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

성능

✅ 매우 빠름

용도

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

권장 사용 환경

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