Effective Java 63. 문자열 연결은 느리니 주의하라

Jung Ho Seo·2020년 8월 26일
0

EffectiveJava

목록 보기
19/35
post-thumbnail

String

문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 하지만 한줄짜리 출력값 정도는 괜찮지만, 본격적으로 사용할 경우 성능저하가 일어난다. 문자열 n개를 잇는 시간은 n2에 비례한다 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용 모두 복사해야 하므로 성능 저하를 피할 수 없다.

문자열을 잘못 연결한 예시

public String statement() {
	String result = “”;
	for (int i = 0; i < numItems(); i ++)
		result += lineForItem(i); // 문자열 연결
	return result;
}

성능을 위해서는 String 대신 StringBuilder를 사용하자

StringBuilder를 사용해 성능을 개선한 예시

public String statement2() {
	StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
	for (int i = 0; i < numItems(); 
		b.append(lineForItem(i));
	return b.toString();
}

이는 품목의 수(루프하는 횟수)를 100개로 하고 실행했을 경우 위의 코드보다 6.5배 정도 빠른 속도를 낸다. 품목수가 늘어나면 늘어날수록 성능 격차도 점점 심해진다.

정리

성능에 신경써야한다면 문자열 연산자를 피하고 StringBuilder를 사용하자

profile
책, 글, 개발

0개의 댓글