item 63) 문자열 연결은 느리니 주의하라
'+' 연산 동작
String을 '+' 연산으로 이어붙이는 방법은 아래와 같이 동작한다.
// 두 문자열 b와 c를 더할 때
String a = b + c;
// 내부적으로는 아래와 같이 동작
String a = new StringBuilder(b).append(c).toString();
for문을 돌 경우 수행 시간은 n^2 에 비례한다.
String은 불변이기 때문에 두 문자열을 모두 복사해 새로운 객체로 연결하기 때문이다.
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++) {
result += lineForItem(i);
}
return result;
}
StringBuilder의 append 메서드
StringBuilder의 append 메서드를 직접 사용하면 성능이 크게 개선된다.
이 방법의 수행 시간은 선형으로 비례한다.
public String statement2() {
StringBuilder sb = new StringBuilder(numItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++) {
sb.append(lineForItem(i));
}
return sb.toString();
}
마무리
이 아이템의 요지는, for문으로 여러번 '+' 연산이 불릴 경우마다 새로운 객체가 생성되는 것을 방지하자는 것이다.
하지만, for문으로 돌리는 상황이 아니라면 '+' 연산을 사용해도 무방할 듯 하다.
Last updated