String,StringBuilder,StringBuffer
String과 StringBuilder,StringBuffer의 차이점
Java에서 String 객체는 한번 값이 할당되면 그 공간은 변하지 않습니다.
할당된 공간이 변하지 않는 특성을 불변(Immutable)성이라고 하고,
할당된 공간이 변하는 특성을 가변(mutable)성이라고 합니다.
String
불변성을 갖는다. → Immutable 하다.
StringBuilder, StringBuffer
가변성을 갖는다. → mutable 하다.
따라서 값이 달라지면 String의 객체주소가 다르고,
StringBuilder, StringBuffer의 객체주소는 같습니다.
** StringBuilder VS StringBuffer**
두 클래스의 기능은 같지만 동기화(Synchronization)에서의 차이점이 있습니다.
StringBuilder는 동기화를 지원하지 않는 반면,
StringBuffer는 동기화를 지원하여 멀티 스레드 환경에서도 안전하게 동작할 수 있습니다.
왜냐하면 StringBuffer는 메서드에서 synchronized 키워드를 사용하기 때문입니다.
java에서 synchronized 키워드는 여러개의 스레드가 한 개의 자원에 접근할려고 할 때,
현재 데이터를 사용하고 있는 스레드를 제외하고 나머지 스레드들이 데이터에 접근할 수 없도록 막는 역할을 수행합니다.
===================================================
String은 불변성을 갖기 때문에
변하지 않는 문자열을 자주 사용할 경우 String 타입을 사용하는 것이 성능면에서 유리합니다.
StringBuilder는 동기화를 지원하지 않는 반면, 속도면에선 StringBuffer 보다 성능이 좋기 때문에,
단일 스레드 환경 과 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우 StringBuilder를 사용하는 것이 성능면에서 유리합니다.
StringBuffer는 동기화를 지원하여 멀티 스레드 환경에서도 안전하게 동작할 수 있기 때문에,
멀티 스레드 환경에서 사용하는 것이 성능면에서 유리합니다.