본문 바로가기

Java

String StringBuffer StringBuilder 차이


1. String vs StringBuffer, StringBuilder

 String

  • immutable(불변함)
  • String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
    • +연산 혹은 concat메소드를 이용해 value가 변경이 되어도 기존 문자열에 붙는 것이 아니라 새로운 String 객체를 만든다.
    • 따라서 기존 객체는 GC에 의해 회수된다.

 StringBuffer, StringBuilder

  • mutable(가변)
  • 문자열 연산으로 기존 객체의 공간이 부족해지면, 버퍼 크기를 늘려서 유연하게 동작한다.



2. StringBuffer vs StringBuilder

  • 두 클래스가 제공하는 메소드는 서로 동일하다.
  • 그러나 StringBuffer는 메소드에 Synchronized 키워드가 존재하여 멀티쓰레드 환경에서도 동기화를 지원한다.
  • 따라서 StringBuffer는 Thread safe하다고 말할 수 있다.


그리고 String 객체의 연산은 객체를 새롭게 만들기 때문에 StringBuffer나 StringBuilder에 비해 퍼포먼스가 좋지 않다고 알고있었다. 

그러나 java 5버전에서 부터 컴파일 시 String을 StringBuilder로 바꿔준다고 한다.
따라서 String이나 StringBuilder나 성능차는 없는 걸로…..


실제로 돌려보니 성능차가 엄청나게 남....

StringBuilder : 5ms

StringBuffer : 6ms

String concat: 5ms

String +연산: 4816ms


StringBuilder > StringBuffer >>>>>>>>>>>>>>>>String


왠만하면 StringBuilder, StiringBuffer 쓰는걸로...