JAVA8 docs의 String
클래스 부분을 보면,
String
은 각각의 character들의 모음(연속체)이며, 상수이다. char[]
로 이루어져 있다는 것을 알 수 있다.StringBuffer
또는 StringBuilder
를 통해 문자열 변경을 지원한다고 한다.+
연산자에 대한 기능을 지원한다고 쓰여있다. +
연산자로 문자열을 합칠 수 있는 기능은 StringBuilder
클래스와 StringBuffer
클래스를 통해 구현된다.String
은 final 클래스이다. 따라서 String
class를 상속받을 수 없다.
- String은 한 번 생성하면 바꿀 수 없다.
- 그러나 + 연산이 가능하다.
- 따라서 연산을 거친 이후에는 새롭게 String이 생성된다는 것을 파악할 수 있다.
StringBuilder
클래스 부분을 보면, 변경이 가능한 character들의 sequence이다. String
과 차이를 보인다. (ArrayList에서 원소를 관리하듯이 추가가 용이하다.)StringBuffer
보다 빠르다. (대부분의 경우 StringBuilder
를 쓰는 이유)StringBuffer
클래스 부분을 보면, 변경이 가능한 character들의 sequence이다.String
과 차이를 보인다. (ArrayList에서 원소를 관리하듯이 추가가 용이하다.)Stringbuilder
와 달리 thread-safe하다고 쓰여있다.종합해보면,
StringBuilder
와StringBuffer
는 모두 변경이 가능한 character들의 sequence이다.- 따라서
String
에 비해 문자열 변경에 관하여 메모리를 아낄 수 있다.(새로 생성되지 않고 추가되므로)StringBuilder
는 단일 스레드에서만 관리되기 때문에 속도 측면에서 빠르다.StringBuffer
는 멀티 스레드에서도 관리가 되지만 속도 측면에서는 느리다.- 따라서 대부분의 경우에는
StringBuilder
를 이용하지만, multi thread 환경에서 안전하게 데이터를 관리하기 위해서는StringBuffer
를 이용해야 한다.