개발 & 데이터베이스/JAVA

자바 String, StringBuffer, StringBuilder 차이

K.두부 2022. 11. 12. 22:07
반응형

자바에서 문자열을 처리할 때 대표적으로 String, Stringbuffer, StringBuilder 3가지를 사용한다. 

위 3가지의 차이점은 무엇일까?

 

String

int, long, float, char, boolean과 같은 primitive 타입이 아닌 reference 타입의 참조형 변수로 한 번 할당된 공간이 변하지 않는 immutable 자료형이다.

 

String str = "Hello ";

str += "World !!!";

위의 그림을 보면 본래 가리키고 있던 "Hello" 를 버리고 "Hello World !!!" 라는 값을 가지는 메모리 영역을 가리킨다. immutable 자료형의 특징으로  문자열을 수정하게 되면 기존에 있던 메모리 영역은 Garbage Collection 으로 사라지고, 새로운 String 인스턴스를 생성한다.

 

StringBuffer / StringBuilder

String 과 다르게 가변성을 띄고 있다. append(), delete() 등의 API를 이용해서 동일 객체 내의 문자열을 변경할 수 있기 때문에 문자열의 추가, 수정, 삭제가 빈번한 경우에 훨씬 유리하다.

 

StringBuffer sb = new StringBuffer("Hello ");

sb.append("World !!!");

 

StringBuffer 와 StringBuilder 차이는 무엇일까?

두 개의 가장 큰 차이점은 동기화 보장 유무이다.

StringBuffer 은 동기화를 보장하기 때문에 멀티 쓰레드 환경에서 안전하다. 또한, String 은 불변성을 가지고 있기 때문에 멀티 쓰레드 환경에서 안전성을 가지고 있다. 

 

StringBuilder 은 동기화를 보장하지 않기 때문에 멀티쓰레드 환경에서 부적합하지만 단일 쓰레드 환경에서의 성능은 훨씬 유리하다.

 

  String StringBuffer StringBuilder
불변성  O X (가변성) X (가변성)
동기화 보장
유리한 환경 문자열 연산이 적고, 멀티 쓰레드 환경 문자열 연산이 많고, 멀티 쓰레드 환경 문자열 연산이 많고, 단일 쓰레드 환경

 

반응형