티스토리 뷰

작고 크기가 고정된 객체의 문자열은 문자열 연결 연산자(+)를 사용해도 되지만,
많은 문자열을 연결할 때는 StringBuilder를 사용하자

 

🔎 문자열 연결 연산자(+) vs StringBuilder, append()

문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다.

한 줄짜리 출력 값이나 작고 크기가 고정된 객체의 문자열 표현을 만들 땐 편리하고 좋지만,

문자열 연결 연산자로 문자열 n개를 잇는 시간은 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();
}

품목이 100개이고, lineForItem이 길이 80인 문자열을 반환한다면 statement2()가 statement()보다 무려 6.5배나 빨랐다.

statement 메서드의 수행 시간은 품목 수의 제곱이 비례해 늘어나고,

statement2 메서드의 수행 시간은 선형으로 늘어난다.

이 말은 즉,, 품목 수가 늘어나면 늘어날수록 성능 격차도 점점 더 벌어진다.

 

 

📚 정리!

성능에 신경 써야 한다면,
많은 문자열을 연결할 때는 문자열 연산자(+)를 피하고, 대신 StringBuilder를 사용하자. 
문자 배열을 사용하거나, 문자열을 연결하지 않고 하나씩 처리하는 방법도 있다.

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
250x250