본 글에서는 문자열을 저장하는 객체인 String과 StringBuilder, StringBuffer의 차이점에 대해 알아보자.
String
StringBuilder
- String과 달리 mutable한 속성을 가진다
- Thread safe하지 않다.
- 다른 thread에서 StringBuilder 객체를 수정할 수 없다.
- synchronization을 지원하지 않는다.
- StringBuffer보다 더 빠르다
StringBuffer
- Thread safe하다.
- 다른 thread에서 StringBuffer 객체를 수정해도 괜찮다.
- synchronization을 지원한다.
- 위의 이유로 StringBuilder보다 느리다.
각각 언제쓰는가?
- String은 변하지 않는 기본적인 문자열을 저장할 때 사용한다.
- StirngBuilder는 가변 문자열, 단일 스레드 환경에서 사용한다.
- StringBuffer는 가변 문자열, 다중 스레드 환경에서 사용한다.
-> 다만 최근에는 JVM과 하드웨어의 성능 향상으로 인해 단일 스레드만으로도 충분하여 StringBuilder를 주로 사용하는 추세이다.
정리
| String | StringBuilder | StringBuffer |
|---|
| 가변성 | X | O | O |
| Thread safe | - | X | O |
| 동기성 | - | X | O |
| 성능 | - | 빠름 | 느림 |