String
- String은 Immutable(불변)하기 때문에 concat이나 + 와 같은 연산 시 원본을 변경하지 않고 새로운 String객체를 생성합니다. 이로인해 메모리공간의 낭비가 발생하고 성능이 떨어지게 됩니다.
- 따라서 JDK1.5이후부터는 컴파일 타임에 StringBuilder로 변경하게 됩니다.
- 불변객체이므로 멀티쓰레드 환경에서 동기화를 신경쓰지 않아도 됩니다.
정리하자면 문자열 연산이 적고 조회가 많은 상황에 적합한 자료형입니다.
StringBuilder, StringBuffer
공통점
- String과는 다르게 Mutable한 객체입니다. 따라서 문자열 연산시 새롭게 객체를 생성하는 것이 아닌 처음 객체를 이용해 연산이나 크기변경을 적용하여 문자열을 변경합니다.
- 따라서 문자열 연산이 자주 발생하는 상황에서 성능적으로 유리합니다.
차이점
- 차이점은 동기화 지원의 유무입니다. StringBuilder는 Thread-Safe하지 않습니다. 즉 멀티스레드를 지원하지 않죠. 반면 StringBuffer는 멀티스레드를 지원합니다.
- 따라서 StringBuilder는 문자열 연산이 많은 싱글쓰레드 환경에서의 사용이 적합하며, StringBuffer는 동기화가 필요하고 문자열 연산이 많은 멀티쓰레드 환경에서 사용하는것이 바람직합니다.