String은 클래스다.
고로 새로 값을 할당할 때마다 다른 주소값이 생기므로 StringBuffer 로 memory 에 append 하는 방식으로 클래스를 직접 생성하지 않는다.
논리적으로보면 클래스를 직접 생성하면 method 나 variable 도 같이 생성되고 여러모로 시간을 잡아먹는데 StringBuffer 는 그런 시간을 사용하지 않는다.
StringBuilder 는 변경가능한 문자열이지만 synchronization 이 적용되지 않으므로 multiple thread 환경에서 안전하지 않다.
그러므로 String buffer 를 사용하면 thread-safe 로 multiple thread 환경에서 안전하다.
builder 가 더 빠름
비동기 동작시 buffer 사용 추천
StringBuffer stringBuffer = new StringBuffer();StringBuilder stringBuilder = new StringBuilder();new Thread(() -> { for(int i=0; i<10000; i++) { stringBuffer.append(i); stringBuilder.append(i); }}).start();new Thread(() -> { for(int i=0; i<10000; i++) { stringBuffer.append(i); stringBuilder.append(i); }}).start();new Thread(() -> { try { Thread.sleep(5000); System.out.println("StringBuffer.length: "+ stringBuffer.length()); System.out.println("StringBuilder.length: "+ stringBuilder.length()); } catch (InterruptedException e) { e.printStackTrace(); }}).start();결과: StringBuffer.length: 77780 StringBuilder.length: 76412