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
'Effectivie Java' 카테고리의 다른 글
61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2025.02.22 |
---|---|
68. 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2025.02.20 |
39. 명명 패턴보다 애너테이션을 사용하라 (0) | 2025.01.26 |
28. 배열보다는 리스트를 사용하라 (0) | 2025.01.19 |
26. 로 타입은 사용하지 말라 (0) | 2025.01.19 |