String, StringBuffer, StringBuilder

Gunjoo Ahn·2023년 2월 14일
0
post-custom-banner

String, StringBuffer, StringBuilder

StringStringBufferStringBuilder
저장 위치String pool(Flyweight Pattern, java 7 이상 Heap에 위치)HeapHeap
MutableXOO
Thread SafeOOX

String

String의 경우 불변(immutable) 객체이므로 객체 자체에 수정을 할 수 없다. 따라서 +와 같은 연산을 했을 때, 해당 주소값에 직접 append하는 것이 아니라 append한 문자열을 새로운 공간에 할당하고 기존 문자열은 참조를 하나 잃게 되는 것이다.

추가로 리터럴 할당과 new키워드 할당의 차이가 있다. new로 생성할 경우 string pool에 해당 문자열이 있어도 새로 할당하게 된다.

StringBuffer / StringBuilder

StringBufferStringBuilder는 가변 객체이며, 해당 객체 주소값에 직접 문자열을 append하게 된다.

StringBuffer vs StringBuilder

Thead Safe에서 차이가 있다. Multi thread 환경이면 StringBuffer를 쓰도록 하자.

성능?

String 연산을 사용한다면 Java 5 이상에서는 컴파일러에서 StringBuilder로 최적화를 시도한다. 그러나 String 덧셈을 반복문안에서 하는 상황같은 경우에는 객체를 계속 추가하는 것은 변함없다. 따라서 String 조작을 해야할 경우, StringBuilderStringBuffer를 멀티 스레드 환경을 고려하여 사용하는 것을 권장한다.

Reference

개발자가 반드시 알아야 할 자바 성능 튜닝 이야기 3장
https://starkying.tistory.com/entry/what-is-java-string-pool
https://starkying.tistory.com/entry/why-java-string-is-immutable
https://ifuwanna.tistory.com/221
https://madplay.github.io/post/difference-between-string-stringbuilder-and-stringbuffer-in-java

profile
Backend Developer
post-custom-banner

0개의 댓글