StringBuilder는 Java에서 문자열을 효율적으로 조작하기 위한 클래스다. 문자열은 일반적으로 불변(immutable)이기 때문에, 문자열 조작 작업이 많을 경우 성능 문제가 생길 수 있다. StringBuilder는 이런 문제를 해결하기 위해 설계되었으며, 가변성(mutable)을 제공한다.
아래에서 StringBuilder의 특징, 주요 메서드, 사용법 등을 정리해보겠다.
java.lang 패키지에 포함된 클래스.String보다 성능이 뛰어남.| 특징 | String | StringBuilder |
|---|---|---|
| 가변성 | 불변 (immutable) | 가변 (mutable) |
| 메모리 효율성 | 문자열 조작 시 매번 새로운 객체 생성 | 문자열 조작 시 동일 객체에서 변경 |
| 스레드 안정성 | 스레드 안전 (thread-safe) | 스레드 안전하지 않음 |
| 속도 | 상대적으로 느림 | 빠름 (GC 부담 적음) |
StringBuilder sb = new StringBuilder(); // 빈 문자열 생성
StringBuilder sb2 = new StringBuilder("Hello"); // 초기 문자열 설정
StringBuilder() : 빈 버퍼를 가진 StringBuilder 객체 생성.StringBuilder(String str) : 초기 문자열을 가진 객체 생성.StringBuilder(int capacity) : 초기 버퍼 크기를 설정.append(String str):this (현재 StringBuilder 객체)StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb); // "Hello World"
insert(int offset, String str):StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " World");
System.out.println(sb); // "Hello World"
delete(int start, int end):StringBuilder sb = new StringBuilder("Hello World");
sb.delete(5, 11);
System.out.println(sb); // "Hello"
deleteCharAt(int index):StringBuilder sb = new StringBuilder("Hello");
sb.deleteCharAt(4);
System.out.println(sb); // "Hell"
replace(int start, int end, String str):StringBuilder sb = new StringBuilder("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb); // "Hello Java"
setCharAt(int index, char ch):StringBuilder sb = new StringBuilder("Hello");
sb.setCharAt(0, 'Y');
System.out.println(sb); // "Yello"
reverse():StringBuilder sb = new StringBuilder("Hello");
sb.reverse();
System.out.println(sb); // "olleH"
length(): 현재 문자열 길이 반환.capacity(): 내부 버퍼 크기 반환.charAt(int index): 특정 인덱스의 문자 반환.StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.length()); // 5
System.out.println(sb.capacity()); // 기본값: 16 + 초기 문자열 길이
System.out.println(sb.charAt(1)); // 'e'
ensureCapacity(int minimumCapacity):trimToSize():StringBuilder sb = new StringBuilder("Hello");
sb.reverse();
System.out.println(sb); // "olleH"
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 추가
sb.insert(6, "Java "); // 삽입
sb.delete(5, 11); // 삭제
System.out.println(sb); // "Hello Java"
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(i).append(", ");
}
System.out.println(sb.toString()); // "0, 1, 2, 3, 4, "
StringBuilder와 StringBuffer의 기능은 거의 동일하다.StringBuilder: 스레드 안전하지 않음, 단일 스레드 환경에서 더 빠름.StringBuffer: 스레드 안전, 동기화가 필요할 때 사용.멀티스레드 환경:
StringBuilder는 스레드 안전하지 않으므로 동기화가 필요한 경우 StringBuffer 사용.메모리 관리:
capacity를 적절히 설정하는 것이 좋음.StringBuilder는 문자열 조작이 빈번한 경우 사용하면 효율적.String이나 StringBuffer보다 더 빠름.