728x90
유니티 C#을 하다가 알게 된 점인데, string을 +연산자로 더할때마다 새로운 문자열 객체를 생성한 뒤 반환하기 때문에 비효율적이라는 것이다. 그래서 string을 자주 변경해줘야할 경우 내부의 버퍼만 변경해주는 StringBuilder라는 클래스를 사용하는 것을 권장하고 있다.
이 점을 인지하고 있는 상태에서 C++로 문자열 관련 문제를 풀다가 +연산자로 concat을 처리하는 것을 보고 궁금해져 검색해보았다.
https://stackoverflow.com/questions/611263/efficient-string-concatenation-in-c
결론은 C++ string도 비슷하다. 하지만 글의 내용에 의하면 정말로 효율성이 필요하지 않는 한 신경 쓸 정도는 아니라고. += 연산자를 사용하면 훨씬 더 낫다고 한다. operator+가 효율적이지 않은 이유는 아래 인터페이스를 보면 알 수 있다.
template <class charT, class traits, class Alloc>
basic_string<charT, traits, Alloc>
operator+(const basic_string<charT, traits, Alloc>& s1,
const basic_string<charT, traits, Alloc>& s2)
보다시피 +연산 다음에 새 객체를 반환하고 있으며, 즉 매번 새로운 버퍼를 사용하는 것을 알 수 있다.
728x90