Item 63. String Concat

문자열 연결은 느리니 주의해서 사용하라

+을 사용하여 편리하게 문자열 연결 연산을 할 수 있는데, 이 연산 자체가 큰 성능 저하를 가져올 수 있다. 문자열은 불변 객체이기 때문에 두 문자열을 연결할 경우 두 문자열을 복사한 후 새로운 문자열을 생성하기 때문에 n개의 문자열을 연결할 경우 n^2의 시간이 걸린다.

StringBuilder 사용

위와 같은 문제를 해결하기 위해 StringBuilder를 사용할 수 있다.

class Example {
    public String statementWithString() {
        String result = "";
        for (int i = 0; i < numItems(); i++) {
            result += lineForItem(i);
        }
        return result;
    }
    
    public String statementWithStringBuilder() {
        StringBuilder sb = new StringBuilder(numItems() * LINE_WIDTH); // 적절한 크기로 초기화하면 더 빠르다
        for (int i = 0; i < numItems(); i++) {
            sb.append(lineForItem(i));
        }
        return sb.toString();
    }
}

사용하더라도 크게 문제가 없는 경우

위 설명과 같아 문자열 연결 연산을 사용하면 성능 저하가 발생하지만 아래와 같은 경우는 사용하더라도 큰 문제가 없다.

  • 한 줄짜리 출력값

  • 작고크기가 고정된 객체의 문자열 표현

Last updated

Was this helpful?