이건 자바로 코테 쳐봤으면 누구나 알 법한 이야기.
📌 String 문자열 연결 방식
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++)
result += lineForItem(i);
return result;
}
한 줄짜치 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들 때는 괜찮은 방법이다.
하지만 본격적으로 사용하게 되면, 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다.
String은 불변 클래스이므로 두 문자열 연결을 위해 양쪽 내용을 모두 복사해야 한다
📌 StringBuilder
public String statement2() {
StringBuilder b = new StringBuilder(newItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
예전에 잠깐 나왔었던 가변 동반 클래스인 StringBuilder를 사용하면 성능 저하를 줄일 수 있다.
(필자의 테스트 상으론) StringBuilder를 충분한 크기로 초기화 했을 때, 문자열 연결방식보다 6.5배 빨랐고,
크기를 초기화 하지 않고 기본값으로 설정했을 때도 5.5배는 빨랐다.