String, StringBuffer, StringBuilder 차이점

Study/Java 2018. 10. 31. 22:50 Posted by meanoflife
반응형

String, StringBuffer, StringBuilder 차이점



Java에서 문자열을 처리하기 위해 많이 사용하는 객체들 입니다.

각 Class의 특성을 알고 사용한다면 좀 더 효율적인 프로그래밍을 할 수 있으리라 봅니다.



■ String


문자열을 다루는 가장 기본적인 클래스입니다.

자바에서 String객체는 한번 생성되면 할당된 메모리 공간이 변하지 않습니다.

문자열을 바꿔게 되면 기존에 생성된 메모리 공간에 문자열을 변경하는 것이 아니라, 새로운 메모리에 문자열을 만듭니다.

그리고 기존 객체가 제거되면 Garbage Collector가 메모리를 회수합니다.

String 클래스는 Heap 메모리 영역에 생성되며, 한 번 생성된 객체는 Immutable이다. 즉, 불변의 특성을 갖습니다.


그러므로 문자열 연산이 많을 경우 성능이 좋지 않습니다.


ex) String str = "문자열";



■ StringBuffer

 

String 객체는 Immutable 특성 때문에 문자열 가공시 오버헤드가 많이 발생하여 성능이 떨어지게 됩니다.

그러므로 문자열 가공이 많을 경우 StringBuffer 객체나 StringBuilder객체를 사용합니다.


ex) StringBuffer sb = new StringBuffer();

     sb.append( "문자열" );



■ StringBuilder


JDK 5.0에서 새로 추가된 클래스로, StringBuffer와 유사합니다.

차이점은 멀티스레드 환경에서 동기화를 보장하지 않습니다.

멀티스레드 환경이 아니라면, StringBuilder 객체를 사용하는 것이 성능상 더 유리합니다.

를 사용하더라도 StringBuilder로 컴파일 되도록 변경되었다. 그래서 성능상으로 차이가 없습니다.


ex) StringBuilder sb = new StringBuilder();

     sb.append( "문자열" );



간단히 요약하자면, 문자열을 한번 저장하고 주로 가져다 쓰기만 한다면 String 객체를,

문자열을 자주 가공한다면 StringBuffer이나 StringBuilder 객체가 유합니다.


끝.

반응형