Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

String / StringBuffer / StringBuilder 본문

Java/References

String / StringBuffer / StringBuilder

defacto standard 2017. 11. 15. 22:43

String – 불변객체. “aaa" 값을 넣고 ”aa"라는 값을 다시 넣으면 변수는 다시 메모리를 할당받고 aa값을 저장.

aaa는 JVM의 Garbage Collector에 의해 메모리가 회수됨. Thread Safe하며 Thread Safe 속도는 빠르다.

Heap 영역에 저장된다.

복잡한 문자열 계산보다는 잘 변하지 않는 문자열을 정의할 때 사용하는 것이 좋다.



 

StringBuffer – char[]배열 사용. 따라서 배열의 시작 주소를 가지고 있으며 char형을 핸들링하는 클래스. char[] 배열을 변경할 수 있어 가변객체다. 따라서 내용의 추가/수정/삭제가 자유로움.

문자열자체를 컨트롤하는 로직에서는 StringBuffer를 쓰는 것이 좋다.

Thread Safe하며 Thread Safe 속도는 매우 느리다.

Heap 영역에 저장된다.

동기화를 보장해야 하므로 속도가 느린 편이며, 따라서 단순 참조의 경우는 String보다 불리하다.



StringBuilder - StringBuffer와 동일하게 가변객체이지만, Thread Safe하지 않다. 따라서 StringBuffer보다 속도가 빠르다.

Heap 영역에 저장된다.



참고로, StringBuffer와 StringBuilder는 가지고 있는 메서드가 같으나, 내부 구현이 Thread Safe한지 아닌지에 따라 다르다.


 - 정리

멀티스레드 환경에서 문자열 연산이 많은 경우 : StringBuffer 사용

단일스레드 환경에서 문자열 연산이 많은 경우 : StringBuilder 사용

문자열 조작이 아닌, 단순 문자열 읽기 연산이 많은 경우 : String

String, StringBuffer, StringBuilder에서 객체의 생성에 대해 자원(시간, 메모리)을 가장 많이 필요로 하는 것 : StringBuffer

Comments