728x90
🔹 StringBuffer 개요
StringBuffer는 Java에서 문자열을 다룰 때 사용되는 클래스로, 가변(mutable) 문자열을 다룰 수 있도록 설계되었습니다.
👉 StringBuffer는 String과 다르게, 문자열을 변경할 수 있습니다!
- String은 불변(immutable) 객체이므로, 문자열을 수정하면 새로운 객체가 생성됩니다.
- 반면, StringBuffer는 내부 버퍼(buffer)를 사용하여 문자열을 변경 가능하도록 만듭니다.
🔹 StringBuffer vs String vs StringBuilder
| 클래스 | 변경 가능 여부 | 동기화(멀티스레드 안전) | 성능 |
| String | ❌ (불변) | ✅ (스레드 안전) | 느림 (새 객체 생성) |
| StringBuffer | ✅ (가변) | ✅ (스레드 안전) | 보통 (멀티스레드 지원) |
| StringBuilder | ✅ (가변) | ❌ (스레드 안전 X) | 빠름 (싱글스레드 환경) |
✅ 멀티스레드 환경에서는 StringBuffer 사용
✅ 싱글스레드 환경에서는 StringBuilder 사용 (더 빠름!)
🔹 StringBuffer 생성 방법
// 기본 생성자 (초기 용량 16)
StringBuffer sb1 = new StringBuffer();
// 특정 문자열로 초기화
StringBuffer sb2 = new StringBuffer("Hello");
// 초기 용량 지정
StringBuffer sb3 = new StringBuffer(50);
🔹 StringBuffer 주요 메서드
1️⃣ 문자열 추가 (append())
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World!");
System.out.println(sb); // "Hello World!"
👉 기존 문자열에 새로운 문자열을 추가합니다.
2️⃣ 문자열 삽입 (insert())
StringBuffer sb = new StringBuffer("Hello");
sb.insert(5, " Java");
System.out.println(sb); // "Hello Java"
👉 특정 위치에 문자열을 삽입합니다.
3️⃣ 문자열 삭제 (delete(), deleteCharAt())
StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 11); // "Hello"
System.out.println(sb);
👉 특정 범위의 문자를 삭제합니다.
StringBuffer sb = new StringBuffer("Hello");
sb.deleteCharAt(4); // "Hell"
System.out.println(sb);
👉 특정 위치의 한 문자만 삭제합니다.
4️⃣ 문자열 변경 (replace())
StringBuffer sb = new StringBuffer("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb); // "Hello Java"
👉 특정 범위의 문자열을 다른 문자열로 변경합니다.
5️⃣ 문자열 뒤집기 (reverse())
StringBuffer sb = new StringBuffer("Hello");
sb.reverse();
System.out.println(sb); // "olleH"
👉 문자열을 반대로 뒤집습니다.
6️⃣ 문자열 길이 확인 (length())
StringBuffer sb = new StringBuffer("Hello");
System.out.println(sb.length()); // 5
7️⃣ 버퍼 크기 확인 (capacity())
StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity()); // 16 (기본 용량)
StringBuffer sb2 = new StringBuffer("Hello");
System.out.println(sb2.capacity()); // 16 + 5 = 21
👉 StringBuffer는 내부적으로 기본 용량(16) + 문자열 길이만큼 저장 공간을 가집니다.
🔹 StringBuffer vs StringBuilder 성능 비교
public class StringBufferTest {
public static void main(String[] args) {
long startTime, endTime;
// StringBuffer 테스트
StringBuffer sb = new StringBuffer();
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
sb.append("a");
}
endTime = System.nanoTime();
System.out.println("StringBuffer 실행 시간: " + (endTime - startTime) + "ns");
// StringBuilder 테스트
StringBuilder sb2 = new StringBuilder();
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
sb2.append("a");
}
endTime = System.nanoTime();
System.out.println("StringBuilder 실행 시간: " + (endTime - startTime) + "ns");
}
}
✅ 실행 결과:
StringBuilder가 StringBuffer보다 빠릅니다.
싱글스레드 환경에서는 StringBuilder를 사용하는 것이 좋습니다!
🎯 정리
| 추천 클래스 | |
| 문자열이 변하지 않는 경우 | String |
| 멀티스레드 환경에서 문자열 변경 | StringBuffer |
| 싱글스레드 환경에서 문자열 변경 (빠름) | StringBuilder |
🔥 멀티스레드 환경에서는 StringBuffer, 성능이 중요한 경우 StringBuilder 사용!
🚀 이해가 잘 되셨나요? 😊
728x90
'개발 > 자바' 카테고리의 다른 글
| Assertions 클래스 (JUnit 5) (0) | 2025.02.14 |
|---|---|
| WebJars란? Java 프로젝트에서 프론트엔드 라이브러리 쉽게 관리하기 (1) | 2025.02.14 |
| Jakarta CDI (Contexts and Dependency Injection) (0) | 2025.02.12 |
| J2EE, Java EE, Jakarta EE의 변천사와 개요 (0) | 2025.02.12 |
| Java의 Assert 문: 디버깅을 위한 강력한 도구 (0) | 2025.02.11 |