관리 메뉴

꿀맛코딩

String vs StringBuffer vs StringBuilder 본문

공부방/알아두면 좋은 지식

String vs StringBuffer vs StringBuilder

soycrab 2019. 7. 12. 15:52

String, , Stringbuffer , Stringbuilder 의 성능 차이에 대해서 알아보자 

 

1. String 

먼저 String 같은 경우는 immutable 하다.

이는 변하지 않는다는 뜻인데,

예를 들어 우리가 + 연산자를 이용해서 문자열을 더할때

String str1  = "Hello" ;

String str2 = "World";

 

str 1 = str1 + str2; 

를 할경우 실질적으로 str1 의 값이 str1 + str2 로 합쳐진 값이 바로 저장되는 것이 아니라.

new String(str1 + str2 ) 의 형태로 새롭게 인스턴스가 생성되어 저장된다. 

따라서 반복문 안에서 String의 값을 변경할때 위처럼 사용하면,

성능이 떨어지게 된다.

 

2. Stringbuffer, Stringbuilder 

Stringbuffer 와 Stringbuilder 는 둘다  mutable 하다.

차이점이 있다면 Stringbuffer는 synchronized(동기화 지원)를 지원하고,

Stringbuilder는 하지 못하는데,

이는 multi thread 환경에서 사용하기 적합하냐 안하냐 차이이다. 

Stringbuffer 와 Stringbuilder를 이용해 문자열을 더해주면 

.append("Hello").append("world")

실제 같은 메모리 주소상에 문자열값이 변해서 저장이 된다. 

 

참고로 stackoverflow 에서 찾아본 결과 

JDK 1.5  이상에서는 

1. 처럼 String 의 문자열을 더해도 컴파일러가 

Stringbulider 로 변환하여 최적화를 시켜주는데 

간단한 연산은 특별히 문제가 없지만 

반복 연산에서는 Stringbuilder객체가 계속해서 생성되므로 여전히 성능상으로는 

좋지 않으니 환경에 맞게 Stringbuilder 또는 Stringbuffer를 사용하면 되겠다. 

 

 

 

참고: https://stackoverflow.com/questions/2971315/string-stringbuffer-and-stringbuilder

 

String, StringBuffer, and StringBuilder

Please tell me a real time situation to compare String, StringBuffer, and StringBuilder?

stackoverflow.com

 

반응형

'공부방 > 알아두면 좋은 지식' 카테고리의 다른 글

JIT Compiler, AOT Compiler  (0) 2019.07.12
Comments