StringBuilder

  • StringBuilder의 동작 원리를 대략적으로 정리한 글입니다.

  • StringBuffer

    • 멀티스레드에 안전
    • 대부분의 메소드에 synchronized 선언됨

1. StringBuilder 객체 생성

StringBuilder sb = new StringBuilder();

  • char 배열을 생성
  • new char[]

2. append("string")

  1. char[]의 크기를 재 설정
  • 새 입력 문자열 길이 + 현재 등록된 문자의 길이 값을 이용해서 현재 등롣된 char[]의 크기를 변경
  1. "string" 문자열을 value 배열에 복사

3. toString()

  1. 새 String 객체를 반환
  • new String(value, 0, count)

4. StringBuilderFake

  1. 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());

+ Recent posts