크게 보면 이렇게 3개를 나눌 수 있다.
앞의 [힙과 스택] 게시물을 봤을때 String은 힙의 스트링풀 영역에 담기는데, 힙인데도 불구하고 불변이라는게 특징이다.
(신기한 스트링풀..)
String은 불변이기 때문에, Heap영역에 저장되더라도 메모리 관리에 비효율적이다.
하지만 빌더와 버퍼와 같이 동기화를 신경쓰지 않아도 된다는 점과 간단한 문자열 조합에는 좋은 성능을 내기 때문에 무조건적으로 빌더와 버퍼를 써야 하는 것은 아니다.
StringBuffer와 StringBuilder의 차이를 알아보려고 한다.
이건 실제로 현대 기술면접 도중 개발 13년차(?) 지원자에게 했던 질문이었다. (나도 몰랐다..)
동기화를 지원한다는 것은 멀티스레드 환경을 지원한다는 것이다.(=멀티스레드 환경에서 안전하다)
동기화를 지원하지 않기 때문에 단일스레드 환경에서 사용해야 안전하다.
단일스레드 환경에서는 Buffer보다 속도가 빠르다.
하지만 항상 멀티스레드환경인지 단일스레드환경인지 파악하기 어렵기 때문에 나는 Buffer를 사용한다.
확실하게 단일스레드 환경이고, 오류가 나도 큰 문제없다면 Builder를 써도 된다.
하지만 언제나 확실한 것은 없으니...