Skip to content

Latest commit

 

History

History
29 lines (23 loc) · 1.33 KB

File metadata and controls

29 lines (23 loc) · 1.33 KB

아이템 63 문자열 연결은 느리니 주의하라

문자열 연결 연산자 (+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다 그런데 한 줄 짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들 때라면 괜찮지만 본격적으로 사용하기 시작하면 성능 저하를 감내하기 어렵다 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사해야 하므로 성능 저하가 발생한다

public String statement() {
		String result = "";
		for (int i = 0; i < numItems(); i++) {
				result += lineForItem(i);
		}
		return result;
}

이렇게 연결을 많이하면 메서드가 심각하게 느려진다 성능을 포기하고 싶지 않다면 String 대신에 StringBuilder를 사용하자

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

이 두 메서드의 성능을 비교해보면 100개 기준 6.5배가 빠르다고 한다

결론은 많은 문자열을 연결할 때에는 문자열 연결 연산자(+)를 피하고 StringBuilder의 append 메서드를 사용하자