C# - StringBuilder

김효중·2025년 4월 25일

개요

C#에서의 문자열(string)은 immutable(불변)이다.
이렇게 불변인 이유는 멀티 스레드 환경을 고려하였을 때 여러 스레드들이 엑서스 할 때 동기화보다 읽기 전용으로 만드는게 더 좋은것과
해시 기반 컬렉션(Dictionary,HashSet)에서 키로 자주 사용하기 때문이다.

이러한 문자열을 +, += 등을 통해 조작하면 이전 객체를 복사한 후 새 객체에 대입하기에 이전 객체는 연결이 끊긴 가바지가 되어 가비지 컬렉터가 수거한다.

그러므로 최적화를 위해서는 수정이 많은 경우는 StringBuilder를 사용한다.

StringBuilder

StringBuilder는 가변 크기 버퍼를 사용하며 기본적으로 16문자를 담는 버퍼를 가진다.
이러한 버퍼안에서 수정을 해도 가비지가 생생되지 않는다.
버퍼가 다 찬 상태에서 Append 사용시 다른 버퍼를 생성한 뒤 링크하여 용량이 2배로 늘어나게 된다.

예시 코드

StringBuilder sb = new StringBuilder();

sb.Append("이름: "); // 일반 문자열 추가
sb.Append("김수한");
sb.AppendLine(); // 줄바꿈 추가
sb.Append("레벨: ");
sb.Append(123);

Debug.Log(sb.ToString());

//이름: 김수한
//레벨: 123

StringBuilder는 객체를 생성한 뒤 그 뒤에 Append()함수를 통해 내용을 추가한다.
그 후 ToString()를 통해 최종적으로 문자열로 반환하여 사용한다.

또한 Insert, Remove, Replace와 같이 string 함수도 똑같이 사용할 수 있다.

언제 사용하는가?

자주 변하는 문자열, 긴 문자열을 조립할 때는 +, += 연산자보다 StringBuilder를 사용한다.

profile
도전하는 개발자

0개의 댓글