Reference/Effective-Java
[Effective-Java] Chapter9 #63. 문자열 연결은 느리니 주의하라
나죽못고나강뿐
2023. 7. 22. 08:56
이건 자바로 코테 쳐봤으면 누구나 알 법한 이야기.
📌 String 문자열 연결 방식
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++)
result += lineForItem(i);
return result;
}
한 줄짜치 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들 때는 괜찮은 방법이다.
하지만 본격적으로 사용하게 되면, 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다.
String은 불변 클래스이므로 두 문자열 연결을 위해 양쪽 내용을 모두 복사해야 한다
📌 StringBuilder
[Effective-Java] Chapter4 #17. 변경 가능성을 최소화하라 : 불변 클래스
불변 클래스란 그 인스턴스 내부 값을 수정할 수 없는 클래스를 말한다. 불변 인스턴스에 간직된 정보는 객체가 파괴되는 순간까지 절대 달라지지 않는다. 자바 플랫폼 라이브러리의 String, 기본
jaeseo0519.tistory.com
public String statement2() {
StringBuilder b = new StringBuilder(newItems() * LINE_WIDTH);
for (int i = 0; i < numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
예전에 잠깐 나왔었던 가변 동반 클래스인 StringBuilder를 사용하면 성능 저하를 줄일 수 있다.
(필자의 테스트 상으론) StringBuilder를 충분한 크기로 초기화 했을 때, 문자열 연결방식보다 6.5배 빨랐고,
크기를 초기화 하지 않고 기본값으로 설정했을 때도 5.5배는 빨랐다.