✨String
- immutable(불변성) 이기 때문에
+
등 문자열끼리 합칠 때 원본변경이 아니라 새로운 String 객체를 생성한다
- JDK 1.5 이후부턴 컴파일 타임에
StringBuilder
로 변경한다
- 반복문을 사용해서 문자열을 더할 때 객체를 계속 추가해야된다
- 불변객체기 때문에 멀티쓰레드 환경에서 동기화를 신경쓰지 않아도 된다
- 문자열 연산이 적고 조회가 많은 상황에서 쓰기 좋다.
✨StringBuilder, StringBuffer
- Mutable(값이 변하는) 객체다
- 문자열 연산시 새롭게 객체를 생성하지 않고 처음에 만든 객체를 이용해 연산한다
- 문자열 연산으로 기존 객체의 공간이 부족해지면 크기를 변경시켜 유연하게 동작
- 문자열 연산이 자주 발생하는 상황에서 성능적으로 유리하다
String Builder와 String Buffer는 동기화 여부에 따라 달라진다
String Builder
- 동기화를 고려하지 않는 상황에서 사용.(Thread를 사용하지 않는 상황.) 문자열 연산이 많은 싱글 쓰레드 환경에서 사용된다
String Buffer
- 동기화가 필요한 멀티 쓰레드 환경에서 사용. 문자열 연산이 많은 멀티 쓰레드 환경에서 사용된다
- 각 메서드별로
Synchronized
키워드가 존재한다
- 동기화 관련 처리로 인해 StringBuilder에 비해 성능이 좋지 않다
String은 짧은 문자열을 더할 때
String Buffer는 쓰레드에 안전한 프로그램이 필요할 때
String Builder는 쓰레드와 상관없는 프로그램이 필요할 때
사용한다