본문 바로가기
Java/Java language

[JAVA]14. String / StringBuilder /StringBuffer ? 차이점

by oomm112 2022. 4. 10.
String / StringBuilder / StringBuffer ?

위 세가지는 모두 String타입 데이터를 다루는 특징들을 가지고 있습니다. 

 


A. String

String은 불변 특징을 가지고 있으며, StringBuilder와 StringBuffer는 이러한 불변 특징떄문에 만들어지게 되었습니다.

불변 특징이란?

더보기

불변 특징이란 , 처음 지정한 값이 변경되지 않는 다는 것을 말합니다.

String word = "Hi";

word = "Hello";

위 처럼 word를 Hi로 최초 선언한 이후, Hello로 값을 변경 하였을까요?

아닙니다, 자바의 Heap영역에는 "Hi"라는 값과 "Hello"라는 값이 두개가 존재하게 되는 것 입니다.

단지, 참조하는 값이 바꼈을 뿐입니다.

 

그리고, Hi라는 값은 힙영역에서 더이상 사용되지 않을경우, GC에 의해서 값이 제거되게 되겠죠?


B. StringBuffer / StringBuilder ?

String에서 설명한 대로 StringBuffer와 StringBuilder는 가변성을 가지고 있으며, append() 또는 delete()등의 메서드를 이용하여 동일한 객체 내에서 문자열을 변경하는 것이 가능합니다.

 

C.  StringBuffer vs StringBuilder 차이점

두가지의 가장 큰 차이점은, 동기화 유무입니다.

  StringBuffer StringBuilder
동기화 (Synchronized) 동기화 지원 동기화 지원 안함

동기화란 무엇인가요?

더보기

동기화 (Synchronized)란?

한 객체에 여러 스레드가 동시에 접근할 경우, 데이터의 정합성을 보장하기 위해 가시성이 확보된 상태를 의미합니다.

 

최종 정리

String : 문자열 연산이 적고 멀티쓰레드 환경일 경우 

StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경인 경우

StringBuilder : 문자열 연산이 많지 않으며, 단일쓰레드 또는 동기화가 필요 없을경우

 

반응형

댓글