java.lang.StringBuilder 클래스
객체 내부에 있는 버퍼에 문자열 내용을 담아두고 거기서 조작을 하기 때문에
String 클래스 처럼 많은 객체를 생성하지 않고도 문자열을 처리 할 수 있다. 즉, 성능의 관점에서 봤을 때 매우 효율적인 문자열 처리 클래스이다. 이전에 사용되었던 StringBuffer와 비교하여 문자열 처리가 빠르다.
StringBuilder buffer = new StringBuilder("Hello World!");
문자열을 파라미터로 받아 인스턴스 생성
[ 문자열의 길이 ] + [ 16 크기의 버퍼 ] 를 생성하고 그 안에 문자열을 저장한다.
StringBuilder buffer = new StringBuilder(8);
정수를 파라미터로 받아 인스턴스 생성
파라미터 크기(정수크기) 만큼의 비어있는 버퍼를 생성한다.
StringBuilder buffer = new StringBuilder();
디폴트 크기 16의 버퍼를 갖는 인스턴스를 생성
StringBuilder 메소드
append()
StringBuilder로 생성된 버퍼에 값을 추가할 때 사용한다.
StringBuilder buffer = new StringBuilder("dre");
buffer.append("am");
System.out.print(buffer);
// Output
// dream
toString()
StringBuilder로 생성된 버퍼내에 있는 값을 String객체로 반환한다.
import java.util.*;
public class ToString {
public String toString() {
StringBuilder buffer = new StringBuilder("Hello World!");
return buffer.toString(); // 버퍼에 있는 문자열을 String객체로 리턴
}
public static void main(String[] args) {
ToString ts = new ToString();
System.out.println(ts);
}
}
// Output
// Hello World!
insert(int offset, String str)
버퍼의 offset 위치에 문자열(str)을 삽입.
delete(int start, int end)
버퍼의 start 부터 end-1 까지의 문자열을 삭제.
int bufSize = buffer.capacity(); // 버퍼 크기를 리턴
int length() // 버퍼의 문자열 길이를 리턴
StringBuilder의 내부적 표현
String 객체의 '+' 연산자를 사용할 때 컴파일러가 자동으로 StringBuilder를 사용한다.
String apple = "apple";
String s = "red" + apple + 486;
System.out.print(s);
// Output
// redapple486
위의 과정을 내부적으로 들여다보면(javap를 사용) 컴파일러는 String s를 만들 때 String객체로 append()를 사용하지 않고 StringBuilder 객체를 생성하여 append()를 호출한다. 우리는 편의상 String을 사용하지만 내부적으로는 컴파일러가 좀 더 효율적인 방식을 취하기 때문이다.
이제 String이 아닌 StringBuiler를 이용하여 작성한 코드문을 보자.
// UsingStringBuilder.java
import java.util.*;
public class UsingStringBuilder {
public static Random rand = new Random(47);
public String toString() {
StringBuilder buffer = new StringBuilder("[ ");//StringBuilder객체생성
for(int i = 0; i < 25; i++) {
buffer.append(rand.nextInt(100)); // 100 이하의 정수를 버퍼
buffer.append(", "); // 에 붙인다
}
buffer.delete(buffer.length()-2, buffer.length()); // 닫는 대괄호를 추
buffer.append("] "); // 가하기 전에 끝에 2개(콤마,스
return buffer.toString(); // 페이스)를 제거하기 위해 사용
}
public static void main(String[] args) {
UsingStringBuilder usb = new UsingStringBuilder();
System.out.println(usb);
}
}
// Output
// [ 58, 55, 93, 61, 61, 29, 68, 0, 22, 7, 88, 28, 51,
// 89, 9, 78, 98, 61, 20, 58, 16, 40, 11, 22, 4]
굳이 StringBuilder 클래스를 이용하여 코딩을 하지 않더라도 그 내부적인 쓰임새를 알고 있으면 좋을 것 같다.
'Java' 카테고리의 다른 글
제네릭(generic) & 컨테이너 (1) | 2009.03.04 |
---|---|
자바 split 메소드로 문자열 분할하기 (0) | 2008.11.26 |
이클립스에서 Java API Docs (도움말) 한글화 (3) | 2008.11.25 |
자바로 OS의 인코딩(Character Set) 확인 해 보기 (0) | 2008.11.24 |
Exception in thread "main" java.lang.ClassFormatError: (2) | 2008.11.24 |