반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- windows
- json
- Array
- 이클립스
- html
- Button
- 이탈리아
- list
- js
- Visual Studio Code
- IntelliJ
- 자바스크립트
- Eclipse
- CMD
- 문자열
- 정규식
- date
- table
- 테이블
- javascript
- Java
- ArrayList
- 배열
- CSS
- vscode
- input
- string
- 인텔리제이
- Maven
- 자바
Archives
- Today
- Total
어제 오늘 내일
[Java] StringBuffer 클래스 사용법 및 예제 (String, StringBuffer, StringBuilder 비교) 본문
IT/Java
[Java] StringBuffer 클래스 사용법 및 예제 (String, StringBuffer, StringBuilder 비교)
hi.anna 2025. 3. 14. 06:46Java StringBuffer 클래스 사용법 및 예제
StringBuffer 클래스는 String과 달리 변경 가능한(mutable) 문자열을 다룰 수 있으며,
StringBuilder와 유사하지만
멀티스레드 환경에서 안전(Thread-safe)하게 동작합니다.
내부적으로 동기화(synchronized)가 적용되어 있어 여러 스레드가 동시에 접근해도
안정적으로 문자열을 수정할 수 있습니다.
1. StringBuffer 생성
StringBuffer sb1 = new StringBuffer(); // 빈 문자열 생성
StringBuffer sb2 = new StringBuffer("Hello"); // 초기 문자열 설정
StringBuffer sb3 = new StringBuffer(50); // 초기 용량(capacity) 설정
- StringBuffer() : 빈 문자열 생성 (기본 용량 16)
- StringBuffer(String str) : 주어진 문자열로 초기화
- StringBuffer(int capacity) : 지정한 용량(capacity)으로 생성
2. 주요 메서드
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); // " World" 삭제
System.out.println(sb); // Hello
sb.deleteCharAt(0); // 첫 번째 문자 'H' 삭제
System.out.println(sb); // ello
- delete(start, end): 특정 범위의 문자열 삭제
- deleteCharAt(index): 특정 위치의 문자 하나만 삭제
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("abcd");
sb.reverse();
System.out.println(sb); // dcba
- 문자열을 반대로 정렬함.
6) 문자열 길이 및 용량 관리 (length, capacity, ensureCapacity)
StringBuffer sb = new StringBuffer("Hello");
System.out.println(sb.length()); // 5
System.out.println(sb.capacity()); // 기본 용량(16) + "Hello" 길이(5)
sb.ensureCapacity(50); // 최소 50의 용량을 확보
System.out.println(sb.capacity()); // 변경된 용량 출력
- length(): 현재 문자열의 길이 반환
- capacity(): 내부 버퍼의 총 크기 반환
- ensureCapacity(n): 최소 용량을 n 이상으로 설정하여 성능 최적화 가능
3. String, StringBuffer, StringBuilder 비교
String | StringBuffer | StringBuilder | |
변경 가능 여부 | 불변 (Immutable) | 가변 (Mutable) | 가변 (Mutable) |
동기화 지원 | 불필요 | 지원 (Thread-safe) | 미지원 (싱글스레드에서 빠름) |
성능 | 느림 (새로운 객체 생성) | 상대적으로 느림 (동기화) | 빠름 (동기화 없음) |
사용 추천 환경 | 변경이 거의 없는 문자열 | 멀티스레드 환경 | 단일 스레드 환경에서 빠른 성능이 필요할 때 |
- String은 불변 객체라서 문자열 변경이 많을 경우 비효율적.
- StringBuffer는 동기화가 적용되어 있어 멀티스레드 환경에서 안전하지만, 성능은 StringBuilder보다 낮음.
- StringBuilder는 동기화가 필요 없는 단일 스레드 환경에서 가장 성능이 좋음.
4. StringBuffer 활용 예제
1) 멀티스레드 환경에서 안전한 문자열 조작
class SharedBuffer {
private StringBuffer buffer = new StringBuffer();
public synchronized void appendData(String data) {
buffer.append(data);
System.out.println("Appended: " + data);
}
public synchronized String getData() {
return buffer.toString();
}
}
public class MultiThreadExample {
public static void main(String[] args) {
SharedBuffer sharedBuffer = new SharedBuffer();
Thread t1 = new Thread(() -> sharedBuffer.appendData("Thread1 "));
Thread t2 = new Thread(() -> sharedBuffer.appendData("Thread2 "));
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final Buffer: " + sharedBuffer.getData());
}
}
- synchronized 키워드를 사용하여 멀티스레드 환경에서 안전하게 문자열을 변경 가능.
5. 결론
- 문자열 변경이 적다면 String 사용 (불변 객체이므로 성능 문제 없음).
- 멀티스레드 환경에서 문자열을 자주 변경해야 한다면 StringBuffer 사용 (동기화 지원).
- 싱글스레드 환경에서 문자열을 자주 변경해야 한다면 StringBuilder 사용 (더 빠른 성능 제공).
StringBuffer는 멀티스레드 환경에서 안전하지만,
단일 스레드에서는 StringBuilder가 더 빠르므로 상황에 맞게 선택해야 합니다.
반응형
'IT > Java' 카테고리의 다른 글
[Java] 문자열의 마지막 개행문자 제거하기 (0) | 2025.03.16 |
---|---|
[Java] 문자열 줄바꿈(개행문자) 제거 (0) | 2025.03.15 |
[Java] StringBuilder 클래스 사용법 및 예제 (0) | 2025.03.13 |
[Java] 배열 선언 및 초기화 방법 (선언과 동시 초기화, 다차원 배열, Stream, 난수 초기화 등) (0) | 2025.03.12 |
[Java] 조건문 - switch-case문 예제 (0) | 2025.03.11 |
Comments