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. 주요 특징
항목 | 설명 |
---|---|
가변성 | ✅ 내부 문자열을 직접 수정 (객체 생성 없음) |
동기화 | ❌ 지원하지 않음 (→ 단일 스레드에서만 안전) |
성능 |
|
내부 구조 |
|
기본 크기 | 초기 용량 16 → 필요 시 자동 확장됨 |
3. 생성자 종류
StringBuilder sb1 = new StringBuilder(); // 초기 버퍼 크기 16
StringBuilder sb2 = new StringBuilder(50); // 초기 버퍼 크기 지정
StringBuilder sb3 = new StringBuilder("Hello"); // 초기 문자열 지정
4. 주요 메서드 정리
메서드 | 설명 |
---|---|
| 문자열 끝에 추가 |
| 특정 위치에 문자열 삽입 |
| 지정 구간 문자 삭제 |
| 지정 인덱스 문자 삭제 |
| 지정 구간을 문자열로 대체 |
| 문자열을 뒤집음 |
| 최종 문자열로 변환 ( |
| 현재 문자열 길이 반환 |
| 내부 버퍼의 총 용량 반환 |
| 최소 버퍼 크기 확보 |
| 특정 위치 문자 변경 |
| 특정 인덱스 문자 반환 |
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 |
---|---|
불변성 | ❌ 가변 |
스레드 안전성 | ❌ 비동기 (단일 스레드만 안전) |
성능 | ✅ 매우 빠름 |
용도 | 반복적인 문자열 연결/수정에 최적 |
권장 사용 환경 | 루프 내 문자열 처리, 대용량 로그 조립 등 |