Java 에서 문자열을 다루는 클래스들입니다.
String 은 불변 객체이며 동시성이 보장됩니다.
한 번 선언하면 Heap에 저장되고
+ 연산자나 concat 메소드를 사용하여 추가하면
기존에 생성된 객체에 추가하는게 아니라 새로운 객체를 만들고 그 객체를 참조하게 만듭니다.
기존 객체는 가비지 컬렉터에 의해 삭제됩니다.
그러므로 문자열을 수정하거나 추가할 일이 많다면 비효율적입니다.
StringBuilder 와 StringBuffer 는 문자열 연산 등으로 기존 객체의 공간이 부족해지면 버퍼 크기를 늘리며 효율적으로 동작합니다.
SringBuffer는 멀티 스레드 환경에서 동기화를 지원하지만 (Synchronized 키워드 사용)
StirngBuilder 는 동기화를 지원하지 않습니다.
JDK 1.5 부터 String + 연산이 있을 경우 컴파일 전 내부적으로 StringBuilder 클래스를 만든 후 다시 문자열로 돌려주게 됩니다.
하지만 문자열 연산인 "1" + "2"
는 내부적으로
new StringBuilder("1").append("2").toString()
와 같아
비효율적이게 되어 문자열을 합칠 일이 많은 경우 Builder를 선언하여 사용하는게 효율적입니다.
Stirng : 불변, 동시성 보장 O, 느림
StringBuilder : 가변, 동시성 보장 X, 빠름
StringBuffer : 가변, 동시성 보장 O, 아주 빠름