평소 문자열을 이용하려 할 때 String 을 많이 썼는데 StringBuffer, StringBuilder 와 속도가 많이 차이가 난다고 해서 간단한 코드로 컴파일 시간을 측정해보았다.
public class Test {
public static void main(String[] args) {
String str = "";
StringBuffer buffer = new StringBuffer();
long startTime = System.nanoTime();
/*for(int i = 0; i<9999; ++i) {
str += 123456789;
}*/
for(int i=0; i<9999; ++i) {
buffer.append("123456789");
}
long endTime = System.nanoTime() - startTime;
System.out.println("끝 : " + endTime);
}
}
먼저 String 부터 측정을 했을 때 회사컴인 i3 2세대, 램8기가 기준
[사진 1: String 연산 속도]
가 나왔다.
그렇다면 StringBuffer 로 측정했을 때는 얼마나 나올까?
[사진 2: StringBuffer 연산 속도]
속도가 4배 차이나는 줄 알았는데 자세히 보니 367배 정도가 차이가 난다.
이건 매직이다.
(StringBuffer 와 StringBuilder 는 스레드와 관련해서 다를 뿐 제공되는 메소드는 같다.)
StringBuilder 를 이용해서 시간을 계산했을 때 StringBuffer 보다 조금 더 빨리 연산을 했다.
왜 다른지에 대해서 한 번 알아보도록 하겠다.
String 객체를 이용해 += 할 때는 연산할 때마다 새로운 String 객체를 생성하는 반면에 StringBuffer 는 append() 함수를 사용할 때 뒤에 계속 추가되는 식으로 되기 때문에 속도가 많이 차이가 나는 것이다.
반응형