StringBuffer란?
StringBuffer는 가변(mutable) 문자열 클래스
- 문자열을 수정해도 새로운 객체를 생성하지 않고, 기존 객체를 변경
- StringBuffer는 내부적으로 문자열을 변경할 때 배열을 사용하므로 성능이 좋음
- StringBuffer는 동기화(synchronized)되어 있어, 멀티스레드 환경에서도 안전하게 사용가능
문자열 연결
String을 사용하여 문자열을 여러 번 연결할 때
String str = "";
for (int i = 0; i < 10; i++) {
str += i; // 매번 새로운 String 객체가 생성됩니다.
}
System.out.println(str); // 출력: 0123456789
위 코드에서 매번 문자열을 연결할 때마다 새로운 String 객체가 생성된다. 하지만 이는 비 효율적이기에 StringBuffer를 사용한다.
StringBuffer를 사용하여 문자열을 연결할 때
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < 10; i++) {
buffer.append(i); // StringBuffer 객체 내에서 문자열이 수정됩니다.
}
System.out.println(buffer.toString()); // 출력: 0123456789
주요 메서드
- append(String str): 문자열을 이어붙입니다.
- insert(int offset, String str): 지정한 위치에 문자열을 삽입합니다.
- delete(int start, int end): 지정한 범위의 문자열을 삭제합니다.
- reverse(): 문자열을 뒤집습니다.
- toString(): StringBuffer 객체를 String으로 변환합니다.
예제
public class StringBufferExample {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("Hello");
// 문자열 추가
buffer.append(" World");
System.out.println(buffer.toString()); // 출력: Hello World
// 문자열 삽입
buffer.insert(5, " Java");
System.out.println(buffer.toString()); // 출력: Hello Java World
// 문자열 삭제
buffer.delete(5, 10);
System.out.println(buffer.toString()); // 출력: Hello World
// 문자열 뒤집기
buffer.reverse();
System.out.println(buffer.toString()); // 출력: dlroW olleH
}
}
결론적으로
StringBuffer는 문자열을 효율적으로 조작할 수 있게 도와주는 클래스
가변(mutable) 문자열을 제공하여 성능 향상
동기화(synchronized)되어 있어 멀티쓰레드 환경에서 안전하게 사용가능
StringBuilder
가변성:
StringBuilder는 문자열을 수정할 수 있는 가변(mutable) 객체
문자열을 추가하거나 수정할 때마다 새로운 객체를 생성하는 것이 아니라, 기존 객체를 직접 수정
성능:
StringBuilder는 StringBuffer와 같은 API를 제공하지만, StringBuffer와 달리 동기화(synchronized)되지 않아 멀티스레드 환경이 아닌 경우 더 빠름
동기화는 스레드 안전을 보장하지만 성능에 오히려 부정적인 영향을 줄 수 있다.
메서드:
StringBuilder는 문자열 조작을 위한 다양한 메서드를 제공
이를 통해 문자열을 효율적으로 조작가능
생성자
StringBuilder(String str)
StringBuilder sb1 = new StringBuilder(); // 빈 생성자
StringBuilder sb2 = new StringBuilder("Hello"); // 문자열로 초기화
문자열 추가
append(String str) : 문자열을 끝에 추가
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // 출력: Hello World
문자열 삽입
insert(int offset, String str) : 지정한 위치에 문자열을 삽입
StringBuilder sb = new StringBuilder("Hello World");
sb.insert(6, "Java ");
System.out.println(sb.toString()); // 출력: Hello Java World
문자열 삭제
delete(int start, int end): 지정한 범위의 문자열을 삭제
StringBuilder sb = new StringBuilder("Hello Java World");
sb.delete(5, 10);
System.out.println(sb.toString()); // 출력: Hello World
deleteCharAt(int index): 지정한 인덱스의 문자를 삭제
StringBuilder sb = new StringBuilder("Hello World");
sb.deleteCharAt(5);
System.out.println(sb.toString()); // 출력: HelloWorld
문자열 교체
replace(int start, int end, String str): 지정한 범위의 문자열을 새 문자열로 교체
StringBuilder sb = new StringBuilder("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // 출력: Hello Java
문자열 뒤집기
reverse() : 문자열을 뒤집는다
StringBuilder sb = new StringBuilder("Hello World");
sb.reverse();
System.out.println(sb.toString()); // 출력: dlroW olleH
문자열 길이 및 용량
length(): 현재 문자열의 길이를 반환
capacity(): 현재 문자열의 용량을 반환
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.length()); // 출력: 5
System.out.println(sb.capacity()); // 기본 용량: 16 + 5 = 21 (기본 용량 16에서 문자열이 추가됨)
장점
StringBuilder는 가변 문자열을 효율적으로 조작할 수 있는 클래스로, 동기화가 필요 없는 단일 스레드 환경에서 뛰어난 성능을 발휘
다양한 문자열 조작 메서드를 제공하여 복잡한 문자열 작업을 간편하게 수행가능
StringBuilder는 문자열을 자주 수정해야 하는 상황에서 성능과 메모리 효율성을 개선하는 데 유용함
'Java 문법정리 (Array부터)' 카테고리의 다른 글
클래스 설계 단계 (3) | 2024.07.23 |
---|---|
객체란? (1) | 2024.07.23 |
Collection: List (0) | 2024.07.22 |
Collection (5) | 2024.07.22 |
자바 배열 (4) | 2024.07.22 |