String + String 에서의 + : 문자열 연결 연산자는 여러 문자열을 하나로 합쳐주는 편리한 수단
단 한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열을 표현할 때만 사용하자
문자열은 불변이기 때문에 두 문자열을 연결할 경우에는 양쪽의 내용을 모두 복사해야하므로,
문자열 연결 연산자를 통한 문자열 n개의 연산은 O(n^2)이다.
예시
// 청구서의 item을 전부 하나의 문자열로 연결하는 메서드
// 문자열 연결을 잘못 사용한 예 - 아이템이 많아지면 많아질수록 성능저하
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++) {
result += lineForItem(i);
}
return result;
}
개선 방법 - StringBuilder 사용
// 문자열 연결 성능이 크게 개선된다!
public String statement2() {
StringBuilder sb = new StringBuilder(numItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++) {
sb.append(lineForItem(i));
}
return sb.toString();
}
- String 의 + 연산자를 통해 수행 시간은 제곱에 비례해 시간이 증가
- StringBuilder.append()를 통한 연산은 선형으로 시간 증가
성능 측정
정리
- 성능을 신경쓴다면 문자열 연결에는 문자열 연결 연산자(+)를 피하자
- StringBuilder.append() 를 통해 처리하도록 하거나 연결하지 않고 하나씩 처리하는 것을 고려하자
'Effective Java' 카테고리의 다른 글
[Effective Java] 아이템 64 - 객체는 인터페이스를 사용해 참조하라 (0) | 2022.05.18 |
---|---|
[Effective Java] 아이템 62 - 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2022.05.18 |
[Effective Java] 아이템 61 - 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.05.18 |
[Effective Java] 아이템 60 - 정확한 답이 필요하다면 float와 double은 피하라 (0) | 2022.05.18 |
[Effective Java] 아이템 59 - 라이브러리를 익히고 사용하라 (0) | 2022.05.10 |