문자열 연결 연산자(+)를 피하라
문자열 연결 연산자(+)로 문자열 n개를 잇는 시간은 n^2에 비례한다
문자연은 불변(Item17)이라서 두 문자열을 연결할 경우 양쪽 문자열 내용을 모두 복사해야 하므로 성능 저하가 있다.
public String statement() {
String result = "";
for (int i=0; i<numItems(); i++)
result += lineForItems(i); // 문자열 연결
return result;
}
String 대신 StringBuilder를 사용하자
아까 메서드와 아래의 메서드는 성능 차이가 크다.
이펙티브 자바 저자가 테스트해보았다. 품목을 100개로 하고 lineForItem이 길이 80인 문자열을 반환하게 하여 실행해보니 아래 메서드가 6.5배 빨랐다고 한다.
public String statement2() {
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for (int i=0; i<numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
유의점: StringBuilder를 전체 결과를 담기에 충분한 크기로 초기화하였다. 그러지 않고 기본값을 사용하면, 6.5배보다 느려져서 5.5배 빠른 결과를 보였다.
유의하자!
문자열 연결(+)은 n^2에 비례해 늘어나고
StringBuilder는 선형으로 늘어난다.
반응형
'JAVA > Effective Java' 카테고리의 다른 글
[이펙티브 자바] 리플렉션보다는 인터페이스를 사용하라 ─ 9장:일반적인 프로그래밍 원칙:Item65 (0) | 2023.10.21 |
---|---|
[이펙티브 자바] 객체는 인터페이스를 사용해 참조하라 ─ 9장:일반적인 프로그래밍 원칙:Item64 (0) | 2023.10.21 |
[이펙티브 자바] 다른 타입이 적절하다면 문자열 사용을 피하라 ─ 9장:일반적인 프로그래밍 원칙:Item62 (0) | 2023.10.20 |
[이펙티브 자바] 박싱된 기본 타입보다는 기본 타입을 사용하라 ─ 9장:일반적인 프로그래밍 원칙:Item61 (1) | 2023.10.20 |
[이펙티브 자바] 정확한 답이 필요하다면 float와 double은 피하라 ─ 9장:일반적인 프로그래밍 원칙:Item60 (0) | 2023.10.20 |