자바에는 문자열을 다루는 클래스로 String, StringBuffer, StringBuilder 라는
3가지 클래스가 있습니다.
String : 한번 생성되면 공간이 변하지 않는 불변(immutable)
StringBuffer, StringBuilder : 공간이 부족할 경우 버퍼의 크기를 유연하게 변경가능한 가변(mutable)
StringBuffer : 동기화(Synchronization)를 지원하여 멀티 스레드 환경에서 안전하게 동작
StringBuilder : 동기화(Synchronization)를 미지원, 단일 스레드 환경에서 사용하도록 설계
단일 스레드 환경에서 StringBuilder 가 StringBuffer 보다 빠르게 동작
String은 내부의 문자열을 수정할 수 없습니다. 위에서 언급한 불변의 특징을 가지고 있기 때문입니다.
문자열을 수정할때마다 새로운 문자열을 리턴합니다.
String str = "ABC";
str += "DEF";
str 변수에 있는 ABC의 값에 DEF가 추가 되었다고 보이겠지만 String 객체는 내부 데이터를 수정할수 없기 때문에 ABC에 DEF가 추가된 새로운 String 객체가 생성되고 str 변수는 새로 생성된 String 객체를 참조하게 됩니다.
기존에 있던 String 객체는 가비지 컬렉션의 메모리 해제를 기다리는 상태로 변하가 됩니다.
문자열 더하기 연산자를 사용한다고 하면 객체가 계속 생성되기 때문에 프로그램의 성능 저하를 일으킬수 있습니다.
⚡ 문자열을 변경하거나 추가할 작업이 있다면 String 보다는 StringBuffer, StringBuilder를 사용하는 것이 좋습니다.
String에 concat 혹은 +를 1000번 이상 하게되면 속도가 너무 느려져 비효율적이므로 그 때에는 StringBuffer나 StringBuilder를 사용을 권장 합니다.