자바에서 문자열 클래스는 대표적으로 String, StringBuilder, StringBuffer가 있다.
사실 String밖에 다루지 않아봐서 잘 몰랐는데 좋은 경험을 하게 되어서 나머지 두 클래스도 다뤄야 겠다고 생각했다.
String과 (StringBuilder, StringBuffer)의 차이
String과 StringBuilder/StringBuffer의 차이는 String 클래스는 immutable(불변), StringBuilder와 StringBuffer 클래스는mutable(가변)적인 클래스라는 차이가 있다.
불변/가변은 자바의 Heap메모리 영역과 관련이 있다.
자바에서 객체들은 Heap영역에 메모리를 할당을 받게되는데, String처럼 불변 속성의 클래스인 경우 값이 변하면 기존에 할당 받은 메모리 크기가 변하는게 아닌 새로운 메모리를 할당받는다.
반대로 가변 속성의 클래스는 기존 할당받은 메모리 영역의 크기가 변하는 것이다.
StringBuilder와 StringBuffer의 차이
StringBuilder와 StringBuffer의 차이는 synchronized(동기화) 키워드의 차이다.
자바에서는 메서드에 synchronized를 붙여서 동기식으로 실행할 수 있다.
원리는 멀티 쓰레드의 환경에서 오직 한 쓰레드만 접근을 가능하게 하여 실행 시키기 때문에 동기화 처리가 가능한 것이다.
StringBuffer는 모든 메서드에 아래 그림처럼 synchronized 처리가 되어있다.
다른 쓰레드의 접근을 막기 때문에 멀티 쓰레드 환경에서 성능의 하락과 안정성 상승을 얻은 것이다.
StringBuilder는 StringBuffer와 다르게, 같은 메서드의 경우에도 아래 그림처럼 synchronized 처리가 되어 있지않다.
따라서 싱글 쓰레드의 환경에서 동기화 처리는 필요없기 때문에 StringBuilder를, 멀티 쓰레드 환경에서는 StringBuffer를 사용하면 알맞을 것 같다.
'Java' 카테고리의 다른 글
String은 왜 불변 객체로 만들었을까? (0) | 2022.05.06 |
---|---|
StringBuilder 살짝 까보기 (생성자, append) (0) | 2022.05.06 |
Java String CompareTo 메서드 (0) | 2021.10.14 |
Java 데이터 타입 Primitive type(기본형) Reference Type(참조형) (0) | 2021.10.13 |
JVM 가비지 컬렉터(GC) Garbage Collector (0) | 2021.10.10 |