티스토리 뷰

자바를 사용할 때 문자열을 합하는 경우가 꽤 많다. 문자열을 합칠 때에는 StringBuilder와 StringBuffer의 append를 사용한 경우와 단순히 String에서 '+'를 사용한 경우의 시간을 비교해 보았다.

public class test {

	public static void main(String[] args) {
		String a = new String();
		StringBuilder sb = new StringBuilder();
		StringBuffer sbf = new StringBuffer();

		long start1 = System.nanoTime();
		for (int i = 0; i < 10000; i++) {
			a += "abcde";
		}
		long end1 = System.nanoTime();

		long start2 = System.nanoTime();
		for (int i = 0; i < 10000; i++) {
			sb.append("abcde");
		}
		long end2 = System.nanoTime();

		long start3 = System.nanoTime();
		for (int i = 0; i < 10000; i++) {
			sbf.append("abcde");
		}
		long end3 = System.nanoTime();

		long time1 = end1 - start1;
		long time2 = end2 - start2;
		long time3 = end3 - start3;
		System.out.format("%s		:%d\n", "String", time1);
		System.out.format("%s	:%d\n", "StringBuilder", time2);
		System.out.format("%s	:%d\n", "StringBuffer", time3); 
	} 
}



위 코드는 각 String, StringBuilder, StringBuffer의 시간을 구하여 비교하였다. 시간은 나노초로 구해보았다.

그 결과값은 다음과 같다. 

String :670874838

StringBuilder :691591

StringBuffer :1324813

StringBuilder와 StringBuffer를 사용하는 경우가 String을 사용하는 경우보다 많이 빨랐다. String에서 '+'를 사용하는 경우는 문자열을 합할때, 이미 존재하는 메모리공간에 합처지는 것이 아닌 새로운 공간을 만들기 때문에 메모리와 속도 효율면에서 좋지 않다고 한다.


그렇다면 문자열을 합칠때, StringBuilder와 StringBuffer중에 어떤 것을 사용해야할까?

StringBuffer는 쓰레드에 안정하게 설계되었기 때문에 쓰레드를 고려해야하는 경우라면 StringBuffer를 사용하고, 그렇지 않은 경우라면 StringBuilder를 사용하는 것이 좋다고 한다.


이 글과 관련한 더 정확한 내용을 얻고 싶다면, "자바 성능을 결정짓는 코딩습관과 튜닝이야기"<책>을 보자.

'Language > Java' 카테고리의 다른 글

[JAVA] 문자열로 클래스 만들기  (1) 2013.11.05
[JAVA] MySql연동  (0) 2013.10.24
[JAVA] System.gc()  (0) 2013.10.21
[JAVA] for, for-each, Iterator 사용하기  (0) 2013.10.15
[JAVA] 가변 매개변수  (0) 2013.09.04
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday