append(String str) | 문자열의 끝에 지정된 문자열 추가 | sb.append("Hello") | Hello |
insert(int offset, String str) | 지정된 인덱스 위치에 문자열 삽입 | sb.insert(5, "World") | "HelloWorld" |
delete(int start, int end) | 지정된 범위의 문자열 삭제 | sb.delete(0, 5) | "World" |
deleteCharAt(int index) | 지정된 인덱스의 문자 삭제 | sb.deleteCharAt(0) | "ello" (H 제거) |
replace(int start, int end, String str) | 지정된 범위의 문자열을 새로운 문자열로 대체 | sb.replace(0, 5, "Hi") | "HiWorld" |
reverse() | 문자열을 반전 | sb.reverse() | "dlroWolleH" |
setCharAt(int index, char ch) | 지정된 인덱스의 문자를 새 문자로 설정 | sb.setCharAt(0, 'h') | "helloWorld" |
substring(int start) | 지정된 인덱스부터 문자열 끝까지 반환 | sb.substring(5) | "World" |
substring(int start, int end) | 지정된 범위의 문자열 반환 | sb.substring(0, 5) | "Hello" |
length() | 문자열의 길이 반환 | sb.length() | 10 |
setLength(int newLength) | 문자열 길이 설정 (짧게 설정하면 잘리고, 길면 공백 추가) | sb.setLength(5) | "Hello" (잘림) |
charAt(int index) | 지정된 인덱스의 문자 반환 | sb.charAt(1) | 'e' |
toString() | StringBuilder/StringBuffer의 문자열을 String으로 반환 | String str = sb.toString() | "HelloWorld" |
capacity() | 현재 용량 반환 | sb.capacity() | 기본 16 또는 증가된 값 |
ensureCapacity(int minimumCapacity) | 최소 용량을 보장하여 자동으로 용량을 증가시킴 | sb.ensureCapacity(20) | 용량이 20 이상으로 설정 |
trimToSize() | 현재 문자열 길이에 맞춰 용량을 줄임 | sb.trimToSize() | 용량이 길이에 맞춰짐 |
StringBuilder와 StringBuffer는 자바에서 가변 문자열을 처리하기 위해 제공되는 클래스입니다. 두 클래스 모두 String과 달리 가변(mutable)하며, 문자열을 빈번하게 수정해야 할 때 유용하게 사용할 수 있습니다. 하지만 스레드 안전성과 성능 측면에서 차이가 있습니다.
차이점 요약
특징StringBuilderStringBuffer
스레드 안전성 | 스레드 안전하지 않음 (비동기화) | 스레드 안전 (동기화) |
성능 | 빠름 (동기화가 없어 오버헤드가 적음) | 상대적으로 느림 (동기화로 인한 오버헤드) |
사용 환경 | 단일 스레드 환경 | 멀티 스레드 환경 |
등장 시기 | Java 5 | Java 1.0 |
주요 차이점 설명
- 스레드 안전성(Thread-Safety)
- StringBuilder는 동기화(synchronization)가 적용되지 않아 스레드 안전하지 않으므로 멀티스레드 환경에서 사용하기에 적합하지 않습니다. 단일 스레드 환경에서 사용하면 성능이 우수합니다.
- StringBuffer는 주요 메서드(append, insert, delete 등)에 동기화가 적용되어 스레드 안전합니다. 따라서 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.
- 성능
- StringBuilder는 동기화가 없기 때문에 단일 스레드 환경에서 빠르게 동작합니다. 따라서 문자열 수정이 빈번한 상황에서 높은 성능을 기대할 수 있습니다.
- StringBuffer는 동기화 처리로 인해 오버헤드가 발생하므로, 단일 스레드에서 StringBuilder보다 상대적으로 성능이 떨어질 수 있습니다. 그러나 멀티스레드 환경에서는 데이터의 일관성을 보장합니다.
- 사용 환경
- 단일 스레드 환경에서는 동기화가 필요하지 않으므로 StringBuilder가 적합합니다. 예를 들어, 로컬 변수로 문자열을 수정할 때는 StringBuilder를 사용하는 것이 좋습니다.
- 멀티스레드 환경에서는 StringBuffer가 적합합니다. 여러 스레드에서 동시에 동일한 StringBuffer 객체를 사용할 때 데이터의 일관성을 유지해줍니다.
- 등장 시기
- StringBuffer는 자바 초기 버전부터 제공된 클래스입니다.
- StringBuilder는 Java 5에서 추가되어, 성능을 개선하고 단일 스레드 환경에서 사용할 수 있도록 설계되었습니다.
'JAVA' 카테고리의 다른 글
List.sort() 메서드 사용방법 정리 (0) | 2024.12.11 |
---|---|
자바Java 파일 입출력 관련 라이브러리/클래스 정리표 + 간단 설명 (0) | 2024.11.06 |
Map 메서드 사용법 정리 (0) | 2024.10.25 |
List 메서드 사용법 정리 (1) | 2024.10.25 |
문자열을 더하는 방법 정리 (0) | 2024.10.25 |