일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- array
- Easy
- SpringBoot 2
- R
- 카데인 알고리즘
- input
- heroku
- 자바 thread 실행 순서 제어
- 자바입력
- scanner
- 수학
- JAVA11
- Kadane's Algorithm
- 자바 스레드 실행 순서 제어
- 사칙연산
- hash table
- Today
- Total
DeFacto-Standard IT
String / StringBuffer / StringBuilder 본문
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
'Java > References' 카테고리의 다른 글
쓰레드 stop()과 interrupt()의 차이 (0) | 2017.11.15 |
---|---|
쓰레드 start()와 run()의 차이 (0) | 2017.11.15 |
익명 클래스 / 익명 객체 (0) | 2017.11.11 |
Interface를 사용하는 이유와 장점 (0) | 2017.11.11 |
상속(Inheritance) / 구현(Implementation) 차이점과 특징 및 장단점 (0) | 2017.11.11 |