개발/Java

[Java] String 과 StringBuffer, StringBuilder

hojak99 2017. 8. 1. 15:30

평소 문자열을 이용하려 할 때 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() 함수를 사용할 때 뒤에 계속 추가되는 식으로 되기 때문에 속도가 많이 차이가 나는 것이다.

반응형