아이템 63. 문자열 연결은 느리니 주의하라. - ksw6169/effective-java GitHub Wiki
문자열 연결 연산자(+)는 성능이 좋지 않다.
- 문자열 연결 연산자는 여러 줄의 문자열을 연결하는 경우 성능 저하가 제곱에 비례해 느려진다.
- 문자열을 불변이라서 두 문자열을 연결하는 경우 양쪽의 내용을 모두 복사해야 하므로 성능 저하는 피할 수 없는 결과다.
문자열 연결이 많은 경우에는 String 대신 StringBuilder를 사용하자.
- String 대신 StringBuilder를 사용하면 문자열 연결 성능이 크게 개선된다.
- 자바 6 이후 문자열 연결 성능이 다방면으로 개선됐지만 이 두 메소드의 성능 차이는 여전히 크다.
- statement 의 수행 시간은 품목 수의 제곱에 비례해 늘어나지만, statement2 는 선형으로 늘어나므로, 품목 수가 늘어날수록 성능 격차도 점점 벌어질 것이다.
// 문자열 연결을 잘못 사용한 예 - 느리다!
public String statement() {
String result = "";
for (int i=0; i<numItems(); i++)
result += lineForItem(i); // 문자열 연결
return result;
}
public String statement2() {
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for (int i=0; i<numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
핵심 정리
- 성능에 신경 써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자를 피하자.
- 대신 StringBuilder의 append 메소드를 사용하자.
- 문자 배열을 사용하거나, 문자열을 연결하지 않고 하나씩 처리하는 방법도 있다.
참고 자료