-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
문자열 연결은 느리니 주의하라
문자열을 연결할 때 흔히 연결 연산자(+)를 많이 사용한다. 하지만 이는 출력값 혹은 작고 크기가 고정된 객체의 문자열을 표현할 때라면 괜찮지만 그렇지 않은 경우에는 성능저하를 감내하기 힘들다.
문자열 연결 연산자로 문자열 n개를 잇는 시간은 n제곱에 비례한다.
이는 문자열이 불변이기에 양쪽의 내용 모두를 복사해야 하므로 발생하는 일이다.
// 청구서의 품목을 전부 하나의 문자열로 연결하는 메소드 (느림)
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++)
result += lineForItem(i);
return result;
}
그렇다면 이를 해결하기 위해서는 어떻게 해야 할까?
성능을 위해서는 String 대신 StringBuilder를 사용하자
public String statement2() {
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
statement() 메소드는 제곱의 비례해 늘어나고 statement2() 메소드는 선형으로 늘어나기 때문에 품목이 많아질 수록 차이는 더 커진다. 따라서 문자열을 연결할 때는 문자열 연결 연산자의 사용은 지양하자.