Java - String 자료형과 StringBuffer

 String 자료형에 + 연산이 있을 때마다 새로운 String 객체가 생성된다(문자열 간 + 연산이 있는 경우 자바는 자동으로 새로운 String 객체를 만들어 낸다.

 

따라서 메모리에 효율적인 사용을 위해서 StringBuffer를 사용하기도 한다.

 

1. StringBuffer

StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("this");
sb.append("is");
sb.append("String");
String result = sb.toString();
System.out.println(result);

 

2. String 

String result = "";
result += "This";
result += "is";
result += "String";
System.out.println(result);

 

 

두개의 예제의 결과는 동일하지만 첫번째는 StringBuffer 객체는 한번만 생성되는 반면에

두번째는 String 자료형에 +연산은 result = result + "is"로 컴파일되어 매번 새 String 객체를 생성한다.

이는 반복문 안에서 사용되면 성능에 큰 영향을 줄 수 있다.

 

그렇다면 무조건 StringBuffer를 사용하는것이 좋은가?

 

그건 상황마다 다르다고 한다. 일반적으로 StringBuffer자료형은 String보다 무거운 편에 속하며

구체적으로 말하면, StringBuffer는 동기화(synchronized)가 되어 있어 멀티스레드 환경에 적합하지만

싱글스레드 환경에서는 불필요한 오버헤드가 발생할 수 있다.

 

따라서 문자열 추가나 변경등의 작업이 많을 경우에 StringBuffer를 그렇지 않는 경우는 그냥 String을

사용하는 것이 유리하다.