본문 바로가기

JAVA

StringBuilder, StringBuffer 메서드 정리, 차이점?

 

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

주요 차이점 설명

  1. 스레드 안전성(Thread-Safety)
    • StringBuilder는 동기화(synchronization)가 적용되지 않아 스레드 안전하지 않으므로 멀티스레드 환경에서 사용하기에 적합하지 않습니다. 단일 스레드 환경에서 사용하면 성능이 우수합니다.
    • StringBuffer는 주요 메서드(append, insert, delete 등)에 동기화가 적용되어 스레드 안전합니다. 따라서 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.
  2. 성능
    • StringBuilder는 동기화가 없기 때문에 단일 스레드 환경에서 빠르게 동작합니다. 따라서 문자열 수정이 빈번한 상황에서 높은 성능을 기대할 수 있습니다.
    • StringBuffer는 동기화 처리로 인해 오버헤드가 발생하므로, 단일 스레드에서 StringBuilder보다 상대적으로 성능이 떨어질 수 있습니다. 그러나 멀티스레드 환경에서는 데이터의 일관성을 보장합니다.
  3. 사용 환경
    • 단일 스레드 환경에서는 동기화가 필요하지 않으므로 StringBuilder가 적합합니다. 예를 들어, 로컬 변수로 문자열을 수정할 때는 StringBuilder를 사용하는 것이 좋습니다.
    • 멀티스레드 환경에서는 StringBuffer가 적합합니다. 여러 스레드에서 동시에 동일한 StringBuffer 객체를 사용할 때 데이터의 일관성을 유지해줍니다.
  4. 등장 시기
    • StringBuffer는 자바 초기 버전부터 제공된 클래스입니다.
    • StringBuilder는 Java 5에서 추가되어, 성능을 개선하고 단일 스레드 환경에서 사용할 수 있도록 설계되었습니다.