본문 바로가기

개발공부

String , StringBuilder, StringBuffer 차이점과 유의사항

반응형

String , StringBuilder, StringBuffer 차이점과 유의사항


String +연산을 했을때

String a = "a"+"b" 하게 되면

new a = a + b 수행하여 새로운 객체에 넣고 기존의 a 지우는 형태인것이다

왜냐하면 String객체는 immutable 불변하는 객체이기 때문인데

String 객체 말고 StirngBuilder StringBuffer같은 경우는 mutable객체로 변할 있는 객체이다

 

 

예제를 본다면


https://gist.github.com/benelog/b81b4434fb8f2220cd0e900be1634753


여기를 참고 있다.

 

JDK 1.5부터는 String 자동 Builder 변환해주는데 StringBuilder 작동원리는 다음과 같다

 

StringBuilder +연산이 왔을때

String a = "a"+"b"

String a = (new  StringBuilder("a")).append("b").toString();

이런 형태로 기존의 a 새로운 수행 환경을 만들어서 기존의 a 넣는 형태이다

 

이와 같이 StringBuilder append 수행하여 붙여 주는 것이다.

 

그럼 StringBuilder StringBuffer 차이를 알아보자

StringBuilder StringBuffer 차이는 syncronized 확인할 있다.

StringBuffer 멀티 쓰레드 에서 사용이 가능하다

멀티쓰레드에서는 syncronize 사용하여 동기화를 지원하도록 한다.

 

그에 반면 StringBuilder 따로 동기화를 지원하지 않는다

 

결론 syncronized 지원해야하는것은 StringBuffer 사용하고

싱글 쓰레드로 사용해도 되는 것은 StringBuilder or StringBuffer 사용한다.

 

 

 

*유의사항*

 

StringBuilder or StringBuffer 사용하려고 할때 유의해야하는 내용이 있다

StirngBuilder 새로운 공간을 만들어서 거기서 수행하고 원래의 변수에 다시 넣는다

그때 StringBuilder 수행하는 영역은 만이다

String str2 = "A"

str2 = str2 + "B"

str2 = str2 + "C"

이렇게 되면 줄씩 실행하기 때문에 첫번째 문장 실행할때도 new StringBuilder 만들어지고

두번째문장도 세번째 문장도 만들어진다

이렇게 되면 +연산을 실행했을때와 다름없는 쓸데없는 객체가 생겼다 없어지는것이다

 

이럴때는 이렇게 해결한다.

 

StringBuilder sb = new StringBuilder();


sb.append("A")

sb.append("B")

sb.append("C")

 

밖에서 StringBuilder 만들어놓고 안에서 직접 append해주는 방법!!!!

이렇게 되면 StringBuilder 하나만 생성되고 for 돌면서 알아서 append해준다. !!!

 

 

결론적으로

빠른 순서를 알아보면 다음 블로그를 참조하면 도움이 될것

http://egloos.zum.com/deblan2/v/419830

속도는 StringBuilder > StringBuffer > String

 

 

*유의사항*

StringBufferStringBuilder는 초기에 생성할 때 Buffer size를 설정하도록 구성되며 이에 대한 생성, 확장 오버로드가 걸리기 때문에 의외로 Buffer Size를 잘못 지정할 경우 성능이 떨어질 가능성도 있음 


2017-12-14 

내가 이해한 내용

반응형

'개발공부' 카테고리의 다른 글

사용하는 포트  (0) 2018.02.14
REST API  (0) 2018.01.22
JSON  (0) 2018.01.22
INFORMATION_SCHEMA  (0) 2017.12.27
URI URL URN  (0) 2017.10.07