JuBin's personal study blog

[JAVA] String, StringBuilder, StringBuffer 차이점 본문

JAVA

[JAVA] String, StringBuilder, StringBuffer 차이점

JuBin 2021. 4. 14. 10:21
반응형

String

  • String은 불변(Immutable) 속성을 갖는다.
  • 멀티쓰레드 환경에서 안전하다(thread-safe)
  • String str = "hello~"; // String str = new String("hello~")  -  1
    str = str + "world"; - 2

    1) str은 stack영역에 저장, "hello~"는 heap영역에 저장된다
    2) str은 stack영역에 그대로지만 "hello~"는 Garbage가되고 str은 새로운 "hello~world"를 참조한다.

  • 연산이 적은(문자열 추가, 수정, 삭제) 경우 사용하면 좋은성능을 기대할 수 있다.
  • 알고리즘에 String클래스를 사용하면 Heap영역에 많은 Garbage가 쌓여 힙메모리 부족현상이 일어날 수 있다.
  • 따라서 연산횟수가 많은경우 StringBuilder, StringBuffer를 사용해야 한다.

 

StringBuffer

  • 동기화를 지원한다.(Synchronized)
  • 동기화를 지원함으로써 멀티쓰레드 환경에서 안전하다.(thread-safe)

 

StringBuilder

  • 동기화를 지원하지 않는다.
  • 동기화를 지원하지 않기때문에 멀티스레드 환경엔 적합하지 않지만 단일스레드에서 성능은
    StringBuffer보다는 뛰어나다.

 

 

정리하자면

String과 StringBuffer는 동기화를 지원해 멀티쓰레드 환경에 적합하고 문자열 연산이 많을경우에는 StringBuffer를 써야한다.

StringBuilder는 문자열 연산이 많고, 단일스레드 환경에 적합하다.

반응형