티스토리 뷰

Java & Spring

[Java] String과 StringBuffer의 차이

강씨아저씨 2016. 2. 1. 21:48

나는 지금까지 자바 프로그래밍을 하면서 String만 사용하였다. 그런데 String을 남용하면 JVM 메모리에 문제가 발생한다고한다. -_-;

그래서 책에서는 String 대신에 StringBuffer를 사용하라고 추천해준다. 사실 나는 StringBuffer를 사용해본적이 없다.

그런데 이녀석 알고보면 굉장히 좋은녀석이다. 일단 Thread-safe 하단다!!

우선 나는 String을 이런식으로 많이 사용했었다. 

 


 

그런데 이렇게 사용하면 JVM 메모리에 많은 양의 Strng이 생성된다는 문제가있다고 한다.


 

그래서 여기서는 StringBuffer를 사용하라고 추천해준다.

 

이렇게 추천해줘도 일단 믿지 못하겠다. 테스트를 해보자!!
 

public static void main(String[] args){

System.out.println("--------- String Test ----------");

StringExample strExam = new StringExample();

System.out.println(strExam.GetDescription());

long beginTime = System.currentTimeMillis();

String rt = "";

for(int i = 0; i<10000; i++){

rt += strExam.GetDescription();

}

System.out.println("Exec Time = "+(System.currentTimeMillis() - beginTime ) + "ms, size = "+ rt.length());

System.out.println("--------- String Buffer Test ----------");

StringBufferExample sbExam = new StringBufferExample();

System.out.println(sbExam.GetDescription());

beginTime = System.currentTimeMillis();

StringBuffer sb = new StringBuffer();

for(int i = 0; i<10000; i++){

sb.append(sbExam.GetDescription());

}

System.out.println("Exec Time = "+(System.currentTimeMillis() - beginTime ) + "ms, size = "+ sb.length());


}

다음은 테스트 결과이다.


 

엄청난 속도차이가 있다. -_-!! 그런데 이런상황은 아주아주 극.단.적.인 상황이다!!

그래도 StringBuffer가 더 유용하니 이제는 String 대신에 StringBuffer를 써야겠다a

혹시 모르니 테스트용 프로젝트도 첨부해놨다. 필요하신 분들이 있을진 모르겠지만 사용하세요a

누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~  

댓글