왜 String을 쓰지 말라는 걸까?


Stringbuffer 클래스와 StringBuilder 클래스

StringBuffer 클래스나 StringBuilder 클래스에서 제공하는 메서드는 동일하다.

차이점은 무엇일까?

StringBuffer 클래스는 스레드에 안전하게 설계 되어 있으므로,
여러 개의 스레드가 하나의 StringBuffer 객체를 처리해도 전혀 문제가 되지 않는다.

하지만 StringBuilder는 단일 스레드에서의 안전성만 보장한다.
그렇기 때문에 여러 개의 스레드에서 하나의 StringBuilder 객체를 처리하면 문제가 발생한다.


String VS. StringBuffer VS. StringBuilder

  1. String
    Stirng은 짧은 문자열을 더할 경우 사용한다.

  2. StirngBuffer
    StringBuffer은 스레드에 안전한 프로그램이 필요할 때나,
    개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하면 좋다.

    만약 클래스에 static으로 선언한 문자열을 변경하거나, singleton으로 선언된 클래스
    (JVM에 객체가 하나만 생성되는 클래스)에 선언된 문자열일 경우에는 이 클래스를 사용해야만 한다.

  3. StringBuilder
    StringBuilder는 스레드에 안전한지의 여부와 관계 없는 프로그램을 개발할 때 사용하면 좋다.
    만약 메서드 내에서 변수를 선언했다면, 해당 변수는 그 메서드 내에서만 살아있기 때문에 StringBuilder를 사용하면 된다.


정리

메모리를 가장 많이 차지하고 응답 시간에 많은 영향을 주는 것은 String 클래스이다.
String 클래스를 쓰는 대신 스레드와 관련이 있으면 StringBuffer를,
스레드 안전 여부와 상관이 없으면 StringBuilder를 사용하는 것을 권장한다.