반응형
문자열 연결할 때 연산자 '+' 는 여러 문자열을 하나로 합하는 편리한 수단이다.
하지만 한 줄 정도를 출력할 때나, 몇 개 정도의 객체를 뭄자열로 변환해서 연결할때는 좋지만,,,,
연결할 것이 많으면 성능에 문제가 생긴다.
n개의 문자열에 연결 연산자를 반복 적용해서 연결하는 데 드는 시간은 n^2에 비례한다. 문자열이 변경 불가능하기 때문이다.
문자열 두 개를 연결할 때, 그 두 문자열의 내용은 전부 복사된다.
개선 전
//문자열을 연결하는 잘못된 방법 - 성능 악영향
public String statements(){
String result = "";
for(int i = 0 l i < numItems() ; i++){
result += lineForItem(i); // String concatenation
}
return result;
}
개선 후
public String statement(){
StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
for(int i = 0 ; i < numItems() ; i++){
b.append(lineForItem(i));
return b.toString();
}
위의 두 메서드의 차이
· 첫 메서드는 항목 숫자 제곱에 비례하는성능
· 두 번째 메서드는 항목 숫자에 비례하는 성능
결론
· 성능이 걱정된다면 많은 문자열을 연결할 때 + 연산자 사용은 피하라.
· StringBuilder의 append메서드를 사용하라.
· 문자 배열(char array)를 사용하거나, 문자열을 연결하는 대신 순차적으로 처리하는 방법을 쓸 수 있다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 49 객체화된 기본 자료형 대신 기본 자료형을 이용하라 (0) | 2023.04.26 |
---|---|
<Effective Java> RULE 50 다른 자료형이 적절하다면 문자열 사용은 피하라 (0) | 2023.04.26 |
<Effective Java> RULE 52 객체를 참조할 때는 그 인터페이스를 사용하라 (0) | 2023.04.26 |
<Effective Java> RULE 53 리플렉션 대신 인터페이스를 이용하라 (0) | 2023.04.26 |
<Effective Java> RULE 54 네이티브 메서드는 신중하게 (0) | 2023.04.26 |