반응형
728x90
반응형
문자열 연결시 String 대신 StringBuilder을 사용 권장
문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 이는 한줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들때는 괜찮지만, 본격적으로 사용하기 시작하면 성능 저하를 감내하기 어렵다.
문자열 연결 연산자로 문자열 n개를 잇는 시간은 n의 제곱에 비례한다. 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사하므로 성능 저하를 피할 수 없는 결과다.
문자열 연결을 잘못 사용한 예시 - 느리다
package com.java.effective.item63;
public class Main {
public static void main(String[] args) {
}
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++) {
result += lineForItem(i); // 문자열 연결
}
return result;
}
}
품목이 많을 경우 이 메서드는 심각하게 느려질 수 있다. 성능을 포기하고 싶지 않다면 String 대신 StringBuilder를 사용하자.
StringBuilder을 사용하면 문자열 연결 성능이 크게 개선된다.
package com.java.effective.item63;
public class Main {
public static void main(String[] args) {
}
public String statement() {
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for ( int i = 0; i < numItems(); i++) {
b.append(lineForItem(i));
}
return b.toString();
}
}
StringBuilder을 사용한 코드가 대략 6.5배 더 빠르다. String 사용 코드의 경우, statement 메서드의 수행 시간은 품목 수의 제곱에 비례해 늘어나고 StringBuilder 사용 코드의 경우, 선형으로 늘어나므로 품목 수가 늘어날 수록 성능 차이도 커진다.
반응형
'Book > Effective Java' 카테고리의 다른 글
[교재 EffectiveJava] 아이템 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2021.12.07 |
---|---|
[교재 EffectiveJava] 아이템 64. 객체는 인스턴스를 사용해 참조하라 (0) | 2021.12.06 |
[교재 EffectiveJava] 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2021.12.04 |
[교재 EffectiveJava] 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2021.12.03 |
[교재 EffectiveJava] 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라 (0) | 2021.12.02 |