반응형
String, StringBuffer, StringBuilder
분류 | String | StringBuffer | StringBuilder |
---|---|---|---|
Storage Area | Heap or Constant String Pool | Heap | Heap |
변경 | No (Immutable)(불변) | Yes (Mutable)(가변) | Yes(Mutable)(가변) |
동기화 | Yes | Synchronized 가능 (Thread-safe) | Synchronized 불가능. |
String 특징
- new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않습니다.(
Immutable
)
ex.+ Boolean, Integer, Float, Long
Garbage Collector
로 제거되어야 합니다.- 문자열 연산시 새로 객체를 만드는 Overhead가 발생합니다.
- 문자열 연산이 많이 일어나는 경우 더 이상 참조되지 않는 기존 객체는 Garabage Collector에 의해 제거되어야 하기 때문에 성능이 좋지 않습니다.
- 객체가 불변하므로, 멀티쓰레드에서 동기화를 신경 쓸 필요가 없습니다.(조회 연산에 매우 큰 장점!)
- 객체가 가지는 값마다 새로운 객체가 필요하기 때문에, 메모리 누수와 새로운 객체를 계속 생성해야하기 때문에 성능저하를 발생시킬 수 있습니다.
String 클래스 : 문자열 연산이 적고, 조회가 많은 멀티쓰레드 환경에서 좋다
StringBuffer, StringBuilder 특징
- 공통점
- new 연산으로 클래스를 한 번만 만듭니다.(
Mutable
) - 문자열 연산 시 새로 객체를 만들지 않고, 크기를 변경시킵니다.
- StringBuffer와 StringBuilder 모두 동일한 메서드를 가지고 있습니다.
- new 연산으로 클래스를 한 번만 만듭니다.(
- 차이점
- StringBuffer는 각 메서드별로
Synchronized
Keyword가 존재하여 멀티 쓰레드 환경에서 동기화를 지원합니다. - 따라서 StringBuffer는
Thread-Safe
하고, StringBuilder는Thread-Safe
하지 않습니다.
- StringBuffer는 각 메서드별로
StringBuffer 클래스 : 문자열 연산이 많은 멀티쓰레드 환경
StringBuilder 클래스 : 문자열 연산이 많은 싱글쓰레드 혹은 Thread를 신경 안쓰는 환경
반응형
'프로그래밍 언어 > [ Java ]' 카테고리의 다른 글
[ Java ] 08. JAVA의 형변환(Promotion, Casting) (0) | 2021.06.13 |
---|---|
[ Java ] 07. JVM에 관하여 (0) | 2021.06.13 |
[ Java ] 05. Call by value vs Call by reference (0) | 2021.06.13 |
[ Java ] 04. Java의 컴파일 과정 (0) | 2021.06.13 |
[ JAVA ] 03. Spring에서 JDBC를 활용하여 DB사용하기 (0) | 2020.08.10 |