StringBuilder
StringBuilder의 동작 원리를 대략적으로 정리한 글입니다.
StringBuffer
- 멀티스레드에 안전
- 대부분의 메소드에 synchronized 선언됨
1. StringBuilder 객체 생성
StringBuilder sb = new StringBuilder();
- char 배열을 생성
- new char[]
2. append("string")
- char[]의 크기를 재 설정
- 새 입력 문자열 길이 + 현재 등록된 문자의 길이 값을 이용해서 현재 등롣된 char[]의 크기를 변경
- "string" 문자열을 value 배열에 복사
3. toString()
- 새 String 객체를 반환
- new String(value, 0, count)
4. StringBuilderFake
- StringBuilder의 append 기능을 대략적으로 따라해본 코드입니다.
public class StringBuilderFake {
private char[] value;
private int count;
public StringBuilderFake() {
value = new char[16];
}
public StringBuilderFake append(String str) {
// value 값 복사 및 추가 문자열 만큼 길이 재 설정
value = Arrays.copyOf(value, str.length() + count);
// value 에 str 복사
str.getChars(0, str.length(), value, count);
// 전체 길이 재 설정
count += str.length();
return this;
}
public String toString() {
return new String(value, 0, count);
}
}
// 테스트
StringBuilder sb = new StringBuilder();
sb.append("123");
sb.append("가나다라마");
sb.append("456");
System.out.println(sb.toString());
StringBuilderFake sbFake = new StringBuilderFake();
sbFake.append("123");
sbFake.append("가나다라마");
sbFake.append("456");
System.out.println(sbFake.toString());