본문 바로가기
Java

Java String , StringBuffer , StringBuilder 란 무엇인가?

by 신입같은 3년차 2017. 7. 15.

String , StringBuffer , StringBuilder은 모두 문자열을 저장하고 관리하는 클래스입니다.


모두 저장하고 관리하는 클래스면 하나로 통일하면 되지 왜 3개로 나누었을까요?? 


이번시간에는 이 세가지 클래스의 차이에 대해 알아보겠습니다.


String : immutable ( 불변함 )


StringBuffer , StringBuilder ( 변함 , 변하기 쉬움 ) 을 의미한다




String


String 객체는 한번 생성되면 할당된 공간이 변하지않는다.


위의 의미가 무슨 의미인지 이해가 안갈수도 있어 보충 설명을 하겠습니다.



 "+"연산 또는 concat()를 통해 기존에 있던 문자열에 다른문자열을 추가했을경우 원래있던 문자열 뒤에 추가되는것이 아니라


Heap영역에 새로운 객체를 생성해 그객체를 참조하게 하는것이다.  이 말은 즉 , 한번 생성된 객체 내부의 내용을 변화 시킬수는 없습니다.


기존에 있던 객체를 참조하는 변수가 없다면 가비지컬렉터(gc)의 대상이되 가비지컬렉터로부터 수거됩니다.



String 객체는 문자열 연산이 많은 경우 성능이 좋지 않습니다.



바로 전에 설명한 글을 보면 기존에 있던 문자열에 추가하거나 연산을할경우 새로운 객체를 만들어 참조하는 방식이기 때문에 


연산이 많아지게 되면 GC가 수거하기전에 Heap영역에 계속 쌓이게되어 메모리가 부족해 속도가 느려질 것입니다.





StringBuffer , StringBuilder


 - Buffer와 Builder의 경우 문자열 연산 , 추가하여 객체의 공간이 부족해지는경우 기존의 버퍼의 크기를 늘려주며 유연하게 동작한다.

   또한 Buffer와 Builder이 제공하는 메서드들은 서로 동일하다



그러면 Buffer와 Builder의 차이는 무엇일까?


Buffer는 멀티 쓰레드 환경에서 사용하기 좋으며 동기화를 지원


Builder은 단일 쓰레드 환경에서 사용하기 좋다


그렇다고 Builder에서 동기화를 지원하지 않는다는 소리는 아니다 Builder도 동기화가 사용가능하지만 동기화처리로 인해 성능이 안좋아

진다.

반응형

댓글