63. 문자열 연결은 느리니 주의하라

2025. 2. 20. 20:58

한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮지만, 많이 연결해야 한다면 성능 저하는 불가피하다. 문자열은 불변이라서 두 문자열을 연결할 경우 문자열 각각을 복사해서 더해야 함으로 문자열 n개를 잇는 시간은 n2에 비례한다.

 

성능을 높이고 싶으면 String 대신 StringBuilder를 사용하라.

시간이 약 6배 빨라진다.

StringBuilder는 메서드 체이닝 방식을 통해한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮지만, 많이 연결해야 한다면 성능 저하는 불가피하다. 문자열은 불변이라서 두 문자열을 연결할 경우 문자열 각각을 복사해서 더해야 함으로 문자열 n개를 잇는 시간은 n2에 비례한다.

 

String 연결은 매번 새로운 객체를 생성해야 해서 느리지만 StringBuilder는 한 객체 내부에서 연산을 수행함으로 빠르다.

 

public class Main {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < 500_000; i++) {
            str += "k";
        }
        long endTime = System.currentTimeMillis();

        System.out.println("String: " + (endTime - startTime));

        startTime = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 500_000; i++) {
            sb.append("k");
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder: " + (endTime - startTime));

    }
}

String: 10322
StringBuilder: 6

BELATED ARTICLES

more