본문 바로가기

컴퓨터공학/Java

CS> String 과 String buffer의 차이점은??

String 은 값이 한 번 정해지면 변하지 않은 불변의 성격(Immutable) 을 갖고 있다. 

새로운 값을 가져야 한다면 기존의 객체에서 변하지 않고 새롭게 객체를 생성한다.

 

String buffer는 가변의 성격(Mutable) 을 갖고 있어서

값이 결정돼도 그 후에 따로 객체를 생성하지 않고 기존의 객체를 이용해서 값만 변경하기 때문에

메모리관리에서 더 효율적이다. 

 

String 

String s1 = "South Korea";

s1 = s1 + "Seoul";

기존에 있는 값을 가지고 새롭게 객체를 만들어서 지정한다.

원래 있는 값은 없어지지 않는다.

 

String buffer

StringBuffer s2 = new StringBuffer("South Korea");

s2.append("Seoul");

 

새로운 객체를 만드는 것이 아니라 기존 객체에 새로운 값을 추가하는 방식이다.

 

 

 

String Builder

StringBuffer s3 = new StringBuilder("South Korea");

s3.append("Seoul");

 

StringBuffer 와 같이 만드는 방법은 유사하다.

하지만 StringBuilder가 더 속도가 빠르다. 

그 이유는 synchronization 이라는 동기화의 여부에 달려있기 때문이다.

 

동기화(synchronization)라는 건 

하나의 제한되어 있는 데이터를 여러 스레드가 공유하여 사용할 때 데이터가 깨지지 않게 줄을 세운 다음 key를 가진 스레드만 접근을 하고 나머지 스레드는 대기를 해서 하나하나 처리하는 방식이다. 

이 방식은 데이터 무결성을 보장할 수 있지만

줄을 서서 처리를 해야 하는 시간이 걸린다는 단점이 생긴다. 

String buffer는 동기화를 지원하지만(Synchronous)

String builder는 동기화를 지원하지 않는다.(Non synchronous)

 

따라서 

멀티 스레드를 고려하지 않는

단순한 문자열 병합을 필요할 경우

String builder가 String buffer보다 성능 측면에서 좋다.

 

 

 

핵심 정리

String - Immutable(불변)

String buffer - Mutable (가변)

String builder - Mutable, Performance(속도가 빠름, Non synchronous)