질문의 목적
- String 과 StringBuffer의 차이
- 기본적으로 자바는 프로그램의 편의성을 위해서 + 연산자를 지원함
- 그럼에도 불구하고 스프링 버퍼 Class를 이용하는 이유는 메모리 관리가 효율적이기 때문.
String
- String 객체는 Heap 메모리에서 한 번 값이 정해지면, 변하지 않는 불변적인 성격(Immutable)을 가지고 있음
- 따라서 새로운 값을 가져야 한다면 기존의 값에서 변형을 하는 것이 아니라, 새롭게 객체를 형성하게 됨
- 예시 )
String s1 = "South Korea";
s1 = s1 + "Seoul";

String Buffer
- String Buffer 는 가변적임(mutable)
- 한번 값이 결정 되어도 그 후에 따로 객체를 생성하지 않고 기존 객체에 값만 변경 함
- 기존 객체 재사용
- 메모리 관리에 효율적이기 때문에 문자율 변경이 빈번히 일어날때 사용
StringBuffer s2 = new StringBuffer("South Korea");
s2.append("Seoul");

StringBuffer vs StringBuilder
StringBuilder s3 = new StringBuilder("South Korea);
s3.append("Seoul")
- StringBuffer 와 코드상 거의 유사하고, mutable 하다.
- StringBuffer 보다 속도가 빠르다
- 왜? StringBuffer 는 Synchronous
이고, StringBuilder는 Non-synchronus
이기 때문
- Synchronous 란? 하나의 제한되어있는 데이터를 여러 스레드가 사용할 경우 데이터가 깨지지 않게스레드를 줄을 세운다음 키를 가지고 있는 스레드만 접근 가능하도록, 나머지는 순차적으로 접근가능하게 하는 방법 --> 데이터 무결성 보장, 처리시간이 오래걸림
- 멀티 스레드를 고려하지 않고 단순히 문자열 병합만 한다면 StringBuilder의 퍼포먼스가 가장 좋다
KeyWord
- String - Immutable(불변)
- StringBuffer - Mutable(가변)
- StringBuilder - Mutable, StringBuffer 보다 퍼포먼스가 좋음 (non-Sychronous)