java.lang 패키지에 위치하는 클래스
앞서 본 String 클래스에 의하면 String 클래스는 불변 객체이므로 문자열 조작이 빈번할 경우
매번 새로운 공간을 할당하기 때문에 성능이 떨어지거나 메모리가 낭비된다.
이런 문제를 해결하기 위해 버퍼(Buffer) 공간을 할당하여
해당 버퍼에 문자열을 저장하고 조작 시 버퍼 데이터를 직접 수정하므로
문자열 조작이 빈번할 경우 String 클래스에 비해서 성능이 향상 된다.
두 클래스의 메서드는 거의 동일하나 사용 목적이 좀 다름. (멀티쓰레딩 환경에서의 성능 향상 관련 차이)
String 클래스와 달리 리터럴을 직접 할당할 수 없으며 반드시 객체 생성(new)를 통해 문자열을 저장한다.
String 클래스와 상속 관계가 없으므로 기본 변환은 불가능하며 생성자나 메서드를 통해 변환 가능함.
<String 클래스 사용법>
String str = "홍길동";
String str2 = new String("홍길동");
<StringBuilder, StringBuffer 클래스 사용법>
StringBuilder builder2 = new StringBuilder("홍길동"); // 객체 생성 할당
StringBuilder builder3 = new StringBuilder(); // 빈 공간 할당도 가능
//StringBuffer buffer1 = "홍길동"; // 불가!
StringBuffer buffer2 = new StringBuffer("홍길동");
StringBuffer buffer3 = new StringBuffer();
// capacity() : 현재 버퍼 크기를 정수로 리턴(자동 증가)
System.out.println("StringBuffer 객체 버퍼 크기 : " + buffer2.capacity());
System.out.println("StringBuffer 객체 버퍼 크기 : " + buffer3.capacity());
System.out.println("StringBuilder 객체 버퍼 크기 : " + builder3.capacity());
// append() : 현재 버퍼의 문자열 뒤에 새 문자열 추가(결합)
// => 연결연산자(+) 와 String 클래스의 concat() 메서드보다 빠르다!
// 즉, StringBuffer 의 append() > String 의 concat() > 연결연산자(+)
buffer3.append("홍길동"); // 버퍼에 문자열 "홍길동" 추가
buffer3.append("-이순신"); // 버퍼에 문자열 "-이순신" 추가
// toString() : 버퍼 내의 문자열을 String 타입으로 리턴
System.out.println(buffer3.toString());
System.out.println(buffer3); // 출력문에서 toString() 메서드 생략 가능
// 주로, StringBuffer(StringBuilder) 객체를 String 타입으로 변환 시 사용
//String str3 = buffer3; // 직접 전달 불가
//String str3 = (String)buffer3; // 상속 관계가 아니므로 강제형변환도 불가
String str3 = buffer3.toString();
System.out.println("변환 후 str3 = " + str3);
// insert() : 특정 인덱스에 지정된 문자열을 삽입
// => append() 메서드는 문자열 뒤에 추가
buffer3.insert(3, "-강감찬");
System.out.println(buffer3);
// reverse() : 문자열 역순으로 뒤집기
buffer3.reverse();
System.out.println(buffer3);
// 기본적으로 제공되는 나머지 문자열 조작 메서드도
// String 클래스의 메서드와 유사하므로 쉽게 사용 가능
'develop > Java' 카테고리의 다른 글
Collection Framework(컬렉션 프레임워크) (0) | 2021.04.04 |
---|---|
java.lang / java.util (0) | 2021.03.23 |
String 클래스 (0) | 2021.03.21 |
Object 클래스 (0) | 2021.03.21 |
인터페이스(Interface) (0) | 2021.03.20 |