String, Stringbuilder, StringBuffer 차이

2014. 5. 16. 14:56프로그래밍/Tip Posting

반응형
SMALL

일단

Stringbuilder,  StringBuffer 차이는 쓰레드에 대한 동기화 보장성을 버퍼는 해주고 빌더는 못한다는 점.

이라고 하니 성능상 차이는 없는 것으로 간주하고

 

문자열 연산을 할때 주로 사용하는 것은

 

스트링의 + 연산자 , concat함수, 스트링빌더의 append 함수....

 

<스트링과 빌더의 차이>

string 연산은 새로운 문자열을 생성하여 복사하는 형식인데, 문자열 생성에는 new가 호출된다.

이 new가 많이 호출되면 당연히 성능상 느리다. 그런점에서 빈번하게 발생하는 코드나 반복문 내에 사용되는 경우 한번만 new를 호출하는 빌더를 사용하는 것이 유리하다. (이 빈번함의 기준은 500회~1200회 이상일 경우에나 성능차이가 난다고 하는데, 그냥 코딩하면서 생각하기에 빈번하게 발생하는지는 본인이 판단할수 있을듯)

스트링빌더의 장점은 new로 인한 오버헤드 횟수를 줄이자는 취지인데 , 스트링빌더의 메모리배열은(기본 16글자 저장공간으로 생성된다) 가득찬 문자열이 아니라면  그 자체로 오버헤드인건 아이러니...


결론 : 빈번하게 호출되는 함수속 코드나 반복문 안의 코드의 경우를 제외하면 스트링은 충분히 빌더만큼 빠르고 가독성이나 코딩에 장점이 많다. 상황에 맞춰 사용하자.

 


<스트링의 두방법을 비교해보면>

1) +의 경우 빌더를 호출하여 new할당하고 합친다는 이야기도 있고 (이 경우 +보다 concat이 두배정도 빠른것으로 구글링)

2) C#, VB.NET 컴파일러가 문자열의 + 연산자를 String.Concat 메쏘드 호출로 컴파일 해준다??는 글을 본적이 있는데 맞다면 +연산이나 concat을 동일하게 생각하고 쓸수 있을것같다.

 

2)의 경우 솔깃한 내용이긴 한데, 컴파일러가 어떻게 해주느냐는 컴파일러마다 다르고 예상할수 없으므로... 상황에 따라 명시적인 코드를 짜야할듯하고, 1)의 경우로 생각해도 상황별 대응은 같은것으로 판단.

 

* +연산자에 대해 C#에서 문자열 상수+ 문자열 상수 에 대해서는 컴파일러에서 concat 호출을 하지않고 그냥 연결된 문자열상수로 인식한다고 한다. 

 

 

참조 : http://www.simpleisbest.net/post/2013/04/24/Review-StringBuilder.aspx

 

 

 

반응형
LIST

'프로그래밍 > Tip Posting' 카테고리의 다른 글

RGB색상표  (0) 2014.07.02
카톡스타일의 푸쉬 알림 기능 구현시 주의할 점  (0) 2014.06.03
유니티 페이스북 연동  (0) 2014.05.13
댕글링포인터  (0) 2014.02.26
데이터형 크기와 범위  (0) 2014.02.26