String 자료형은 불변(immutable) 클래스이므로, 한번 생성된 문자열은 변경할 수 없다.
String str = "Hello";
str = str + " World";
위 예시에서 String 자료형에 + 연산이 일어날 때 새로운 String 객체를 생성하는 것이기 때문에 총 2개의 String 객체가 만들어진 것이다.
=> 따라서 문자열 연결이나 수정이 필요할 때마다 새로운 문자열을 생성하기 때문에 성능이 떨어질 수 있다.
StringBuffer 자료형은 가변(mutable) 클래스이므로, 내부의 문자열을 변경할 수 있다.
StringBuffer buffer = new StringBuffer("Hello");
buffer.append(" World");
아래에서 설명할 StringBuilder 와 비슷하고 사용법도 같은데 차이점이 있다.
그렇다면 멀티스레드 환경에서 무조건 StringBuffer 를 사용하는 것이 좋을까 ?
StringBuilder 자료형 또한 가변(mutable) 클래스이고, 내부의 문자열을 변경할 수 있다.
StringBuilder builder = new StringBuilder("Hello");
builder.append(" World");
=> 따라서 대부분의 상황에서는 StringBuilder 를 사용하고, 멀티스레드 환경에서의 안전성이 중요한 경우에만 StringBuffer 를 고려하면 된다.