전공 지식/JAVA

String StringBuilder StringBuffer

큼큼이 2018. 12. 6. 16:29

자바에서 스트링 세가지 종류!

String StringBuilder StringBuffer


에 대해 알아보겠다~


결과만 보면 다음과 같다

 String

 StringBuilder

 StringBuffer

Immutable

Mutable 

 Mutable

Synchronized

Unsynchronized 

Synchronized 


Immutable 과 Mutable 의 차이는 무엇일까?


Immutable (불변)

: String 은 생성되면 그 메모리 공간은 절대 변하지 않는다.

따라서 문자열을 바꿀 때, 새로운 메모리 공간을 할당하여 String 이 만들어지고 그 위치를 변수가 가리키게 되는 방식이다.

문자열이 자주 바뀐다면 객체를 계속해서 새로 만들어야 하기 때문에 오버헤드가 발생할 가능성이 커진다.

또 Garbage Collector 에 의해 delete 되어야한다.


mutable (가변)

: 메모리 공간의 크기가 변할 수 있음을 의미한다.

StringBuilder,  StringBuffer 는 메모리 공간의 크기가 변할 수 있으므로 문자열이 바뀔 때 메모리 공간의 주소는 변하지 않고 크기가 줄어들었다 커졌다 한다.



Synchronized (동기화)

: MultiThread 환경일 때, 알아서 동기화가 된다.



각각 언제 사용하면 좋을까?

String : 값이 변경되지 않을때, 멀티 스레드 환경일 때


StringBuilder : 값이 자주 변경될 때, 멀티 스레드 환경이 아닐 때


StringBuffer : 값이 자주 변경될 때, 멀테 스레드 환경 일 때