[Java] 자바 - StringBuffer와 StringBuilder 클래스의 특징
자바 - StringBuffer와 StringBuilder 클래스의 특징
자바에서 StringBuffer와 StringBuilder클래스를 사용하는 이유는, String클래스의 경우에는 한번 문자열이 만들어지면 그 내용을 변경할 수가 없습니다. 그래서 문자열 내용을 변경하게 되면 새로운 문자열이 생성되어 사용됩니다. 이러한 이유로 문자열 내용 수정이 자주 필요한 경우에는 String클래스 대신 문자열 수정이 가능한 StringBuffer클래스 또는 StringBuilder클래스를 사용합니다.
여기에서는 StringBuffer클래스와 StringBuilder클래스의 특징과 차이점에 대해서 알아보도록 하겠습니다.
목차
- StringBuffer 클래스
- StringBuffer 클래스의 생성자
- StringBuffer 클래스의 메소드
- StringBuilder 클래스
- StringBuffer와 StringBuilder 클래스에 정의된 메소드 비교
1. StringBuffer 클래스
StringBuffer클래스는 문자열 내용 수정이 가능한 클래스로 문자열 수정이 빈번하게 일어나는 경우 사용됩니다. 문자열을 위한 버퍼를 두고 관리하기 때문에 문자열 수정이 가능하며, 이 버퍼는 문자열의 길이가 변함에 따라 자동 조절됩니다. 사용자는 객체 생성 시에 버퍼 크기를 지정하여 생성할 수도 있습니다.
1) StringBuffer 클래스의 생성자
- StringBuffer( ) : 빈 객체 생성 (버퍼크기 : 16)
- StringBuffer(int capacity) : 빈 객체 생성 (버퍼크기 : capacity)
- StringBuffer(String str) : str문자열 객체 생성 (버퍼크기 : str 문자열의 길이 + 16)
- StringBuffer(CharSequence seq) : seq 문자열 객체 생성 (버퍼크기 : seq 문자열의 길이 + 16)
String a = new String("aaa");
StringBuffer b = new StringBuffer("bbb");
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer(10);
StringBuffer sb3 = new StringBuffer(a);
StringBuffer sb4 = new StringBuffer(b);
System.out.println(sb1 + ":" + sb1.capacity());
System.out.println(sb2 + ":" + sb2.capacity());
System.out.println(sb3 + ":" + sb3.capacity());
System.out.println(sb4 + ":" + sb4.capacity());
[실행결과]
:16
:10
aaa:19
bbb:19
2) StringBuffer 클래스의 메소드
StringBuffer클래스에서 문자열을 다루는에 사용되는 메소드들입니다. 메소드에 따라서 문자열 내용이 수정됩니다.
- int capacity() : StringBuffer 객체의 크기를 반환합니다.
- int length() : 문자열의 길이를 반환합니다.
- void setLength(int newLength) : 문자열의 길이를 newLength로 변경합니다.
- char charAt(int index) : index 위치에 있는 문자를 반환합니다.
- StringBuffer append(String str) : 현재 문자열에 이어서 str문자열을 추가합니다.
- StringBuffer delete(int start, int end) : start위치에서부터 end-1 위치에 있는 문자를 삭제합니다.
- StringBuffer insert(int offset, String str) : str문자열을 현재 문자열의 offset 위치에 삽입합니다.
- StringBuffer replace(int start, int end, String str) : start위치에서부터 end-1 위치에 있는 문자를 str 문자열로 대체합니다.
- StringBuffer reverse() : 문자열 순서를 반대로 변경합니다.
- 기타 등등
2. StringBuilder 클래스
StringBuilder 클래스는 StringBuffer 클래스와 마찬가지로 문자열 내용을 수정할 수 있는 클래스로 대부분의 경우 동일하게 동작합니다. 다만 이 두 클래스의 차이점은 멀티스레드 환경을 고려한 동기화(synchronized) 처리가 되어 있는지 여부입니다. StringBuffer클래스는 동기화 처리가 되어 있어 멀티스레드 환경에서 안전합니다. 하지만 StringBuilder 클래스는 동기화 처리가 되어 있지 않아 멀티스레드 환경에서는 문제가 발생할 수 있습니다. 그런데도 StringBuilder 클래스가 존재하는 이유는 이러한 동기화 부분이 빠져있기 때문에 성능이 더 좋기 때문입니다.
따라서 멀티스레드 환경에서는 StringBuffer 클래스를, 싱글스레드 환경에서는 StringBuilder 클래스를 사용합니다.
1) StringBuffer와 StringBuilder 클래스에 정의된 메소드 비교
//[StringBuffer]
public synchronized StringBuffer delete(int start, int end) { ... }
//[StringBuilder]
public StringBuilder delete(int start, int end) { ... }
2022.07.18 - [IT 개발/Java] - [Java] 자바 - StringBuffer/StringBuilder클래스의 메소드 및 사용예제