Java: StringBuffer 주요 메서드 정리
1. StringBuffer
란?
- 가변(mutable) 문자열 클래스
StringBuilder
와 API는 동일하지만, 멀티스레드 환경에서 안전하도록 모든 메서드에synchronized
처리- 성능은
StringBuilder
보다 약간 느리지만, 스레드 안정성 보장
2. 주요 메서드 + 내부 동작
아래 메서드들은
StringBuilder
와 메서드명이 동일하며, 내부적으로 synchronized 블록을 포함한다는 점만 다름.
🔹 append(String str)
- 문자열을 끝에 추가
- 예:
new StringBuffer("hi").append(" there") → "hi there"
- 시간복잡도: O(1) (평균), O(n) (버퍼 확장 시)
🔹 insert(int offset, String str)
- 지정 위치에 문자열 삽입
- 예:
"abc".insert(1, "X") → "aXbc"
- 시간복잡도: O(n)
🔹 delete(int start, int end)
- 주어진 범위 삭제
- 예:
"abcdef".delete(2, 4) → "abef"
- 시간복잡도: O(n)
🔹 deleteCharAt(int index)
- 인덱스에 해당하는 문자 하나 삭제
- 예:
"abc".deleteCharAt(1) → "ac"
- 시간복잡도: O(n)
🔹 replace(int start, int end, String str)
- 지정 범위 문자열을 새 문자열로 교체
- 예:
"abcde".replace(1, 4, "X") → "aXe"
- 시간복잡도: O(n)
🔹 reverse()
- 문자열을 뒤집음
- 예:
"hello".reverse() → "olleh"
- 시간복잡도: O(n)
🔹 toString()
- 최종 문자열을
String
객체로 반환 - 예:
sb.toString()
- 시간복잡도: O(n)
🔹 setCharAt(int index, char c)
- 인덱스 위치의 문자를 변경
- 예:
"java".setCharAt(1, 'o') → "jova"
- 시간복잡도: O(1)
🔹 charAt(int index)
- 지정 위치 문자 반환
- 예:
"java".charAt(2) → 'v'
- 시간복잡도: O(1)
🔹 length()
- 문자열 길이 반환
- 예:
"abc".length() → 3
- 시간복잡도: O(1)
🔹 capacity()
- 내부 버퍼 용량 반환
- 예:
new StringBuffer(10).capacity() → 10
- 시간복잡도: O(1)
🔹 ensureCapacity(int minimumCapacity)
- 버퍼 크기 미리 확보 (확장용)
- 예:
sb.ensureCapacity(100)
- 시간복잡도: O(n) (버퍼 확장 시)
3. 체이닝 예시
StringBuffer sb = new StringBuffer("Hi");
String result = sb.append(" there")
.replace(0, 2, "Bye")
.reverse()
.toString();
System.out.println(result); // "ereht eyB"
4. 주의사항
항목 | 설명 |
---|---|
스레드 안전성 | ✅ |
성능 | ❌ |
내부 수정 | ✅ 같은 객체 내에서 수정 |
메서드 반환값 | 대부분 |
✅ 요약 테이블
메서드 | 설명 | 시간복잡도 | 리턴값 |
---|---|---|---|
| 문자열 끝에 추가 | O(1~n) |
|
| 중간에 삽입 | O(n) |
|
| 구간 삭제 | O(n) |
|
| 문자 하나 삭제 | O(n) |
|
| 구간 대체 | O(n) |
|
| 문자열 뒤집기 | O(n) |
|
| 문자 조회 | O(1) |
|
| 문자 수정 | O(1) | void |
| 문자열 길이 | O(1) |
|
| 버퍼 크기 조회 | O(1) |
|
| 최소 용량 확보 | O(n) | void |
| 문자열 객체 반환 | O(n) |
|