오늘은 StringBuilder에 대해 포스팅할려고합니다. 정확히는 String과 StringBuilder의 속도차이에 대해 이야기하려고 합니다.
StringBuffer와 StringBuilder의 차이는 다음 포스팅에 알아보겠습니다!
StringBuilder 클래스는 변경가능한 문자열의 객체를 생성합니다.
StringBuilder stringBuilder1 = new StringBuilder("test");
System.out.println("stringBuilder1 = " + stringBuilder1); // stringBuilder1 = test
StringBuilder stringBuilder2 = stringBuilder1.append("123");
System.out.println("stringBuilder2 = " + stringBuilder2); // stringBuilder2 = test123
System.out.println(stringBuilder1 == stringBuilder2); //true
위 코드에서 처럼 stringBuilder1
와 stringBuilder2
는 동등성 비교에서 동일한 객체입니다.
String은 +
연산자를 사용하면, 항상 새로운 객체가 생성된다는 것을 기억해주세요!
그렇다면, String과 StringBuilder의 실행 속도 차이를 알아봅시다!
StringBuilder stringBuilder = new StringBuilder("test");
long start = System.nanoTime();
for (int i = 0; i < 100; i++) {
stringBuilder.append(i);
}
long end = System.nanoTime();
System.out.println("result time = " + (end - start));
//result time = 28500
------------------------------
String str = "test";
long start1 = System.nanoTime();
for (int i = 0; i < 100; i++) {
str = str + i;
}
long end1 = System.nanoTime();
System.out.println("result time = " + (end1 - start1));
//result time = 5711709
실제로 StringBuilder를 사용했을 때 걸린 시간(28500
)과 String +
연산자를 사용했을 때, 걸린 시간(5711709
)이 훨씬 오래 걸리는 것을 확인할 수 있습니다.
위에서 언급한 새로운 객체가 생성되는 것과 관련이 있을까요? 한 번 확인을 해보시죠!
StringBuilder stringBuilder = new StringBuilder("test");
for (int i = 0; i < 10; i++) {
long start1 = System.nanoTime();
stringBuilder.append(i);
long end1 = System.nanoTime();
System.out.println("StringBuilder time = " + (end1 - start1));
}
String str = "test";
for (int i = 0; i < 10; i++) {
long start2 = System.nanoTime();
str = str + i;
long end2 = System.nanoTime();
System.out.println("String time = " + (end2 - start2));
}
//결과
StringBuilder time = 2334
StringBuilder time = 1500
StringBuilder time = 750
StringBuilder time = 542
StringBuilder time = 375
StringBuilder time = 375
StringBuilder time = 333
StringBuilder time = 334
StringBuilder time = 334
StringBuilder time = 292
String time = 4935500
String time = 4583
String time = 2917
String time = 2500
String time = 2417
String time = 2000
String time = 1958
String이 +
연산을 사용하여 새로운 인스턴스를 생성하기 때문에 조금 더 많은 시간이 걸리는 것을 확인할 수 있습니다.
문자열을 수정할 일이 있다면, StringBuilder를 사용하는 것이 빠르다. 특히 여러번 수행할 경우....
다음 포스팅은 StringBuilder와 StringBuffer의 차이를 알아보겠습니다!
Reference