String / StringBuilder / StringBuffer ?
위 세가지는 모두 String타입 데이터를 다루는 특징들을 가지고 있습니다.
A. String
String은 불변 특징을 가지고 있으며, StringBuilder와 StringBuffer는 이러한 불변 특징떄문에 만들어지게 되었습니다.
불변 특징이란?
더보기
불변 특징이란 , 처음 지정한 값이 변경되지 않는 다는 것을 말합니다.
String word = "Hi";
word = "Hello";
위 처럼 word를 Hi로 최초 선언한 이후, Hello로 값을 변경 하였을까요?
아닙니다, 자바의 Heap영역에는 "Hi"라는 값과 "Hello"라는 값이 두개가 존재하게 되는 것 입니다.
단지, 참조하는 값이 바꼈을 뿐입니다.
그리고, Hi라는 값은 힙영역에서 더이상 사용되지 않을경우, GC에 의해서 값이 제거되게 되겠죠?
B. StringBuffer / StringBuilder ?
String에서 설명한 대로 StringBuffer와 StringBuilder는 가변성을 가지고 있으며, append() 또는 delete()등의 메서드를 이용하여 동일한 객체 내에서 문자열을 변경하는 것이 가능합니다.
C. StringBuffer vs StringBuilder 차이점
두가지의 가장 큰 차이점은, 동기화 유무입니다.
| StringBuffer | StringBuilder | |
| 동기화 (Synchronized) | 동기화 지원 | 동기화 지원 안함 |
동기화란 무엇인가요?
더보기
동기화 (Synchronized)란?
한 객체에 여러 스레드가 동시에 접근할 경우, 데이터의 정합성을 보장하기 위해 가시성이 확보된 상태를 의미합니다.
최종 정리
String : 문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경인 경우
StringBuilder : 문자열 연산이 많지 않으며, 단일쓰레드 또는 동기화가 필요 없을경우
반응형
'Java > Java language' 카테고리의 다른 글
| [JAVA]13. GC(가비지 컬렉터)? (0) | 2022.03.27 |
|---|---|
| [JAVA]12. 자바의 실행과정과 JVM (0) | 2022.03.27 |
| [JAVA]11. 객체지향 프로그래밍(OOP)의 SOLID 5대원칙? (0) | 2022.03.11 |
| [JAVA]10. 컬렉션 구조 (Set과 Map) (0) | 2021.08.14 |
| [JAVA]9. 컬렉션 구조 -1 (List ) + Stack (0) | 2021.08.14 |
댓글