C#에서 StringBuilder는 문자열을 효율적으로 조작할 수 있게 해주는 클래스입니다. 기본 생성자로 StringBuilder를 만들면 내부 버퍼의 초기 용량(capacity)은 16으로 설정되지만, 생성자에 숫자를 전달하면 원하는 용량을 직접 지정할 수 있습니다.
기본 개념
StringBuilder의 Capacity 속성은 현재 객체가 할당한 메모리에 저장할 수 있는 최대 문자 수를 나타냅니다. 저장할 문자열의 크기를 미리 알고 있다면, 용량을 지정하여 불필요한 메모리 재할당과 성능 저하를 방지할 수 있습니다.
예제 1: 다양한 방식으로 StringBuilder 생성하기
using System;
using System.Text;
public class Demo {
public static void Main(String[] args){
StringBuilder strBuilder1 = new StringBuilder("Tim");
StringBuilder strBuilder2 = new StringBuilder("Tom");
StringBuilder strBuilder3 = new StringBuilder();
StringBuilder strBuilder4 = new StringBuilder(5);
strBuilder2 = strBuilder3;
Console.WriteLine("Is StringBuilder3 equal to StringBuilder2? = "+strBuilder3.Equals(strBuilder2));
Console.WriteLine("StringBuider1 capacity = "+strBuilder1.Capacity);
Console.WriteLine("StringBuider2 capacity = "+strBuilder2.Capacity);
Console.WriteLine("StringBuider3 capacity = "+strBuilder3.Capacity);
Console.WriteLine("StringBuider4 capacity = "+strBuilder4.Capacity);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Is StringBuilder3 equal to StringBuilder2? = True StringBuider1 capacity = 16 StringBuider2 capacity = 16 StringBuider3 capacity = 16 StringBuider4 capacity = 5
결과 분석
- 문자열 "Tim"으로 생성한 strBuilder1은 기본 용량인 16을 가집니다.
- strBuilder2는 strBuilder3를 참조하도록 할당되었으므로 Equals 비교 결과는 True이며, 용량 역시 동일하게 16입니다.
- 매개변수 없이 생성한 strBuilder3도 기본 용량 16을 가집니다.
- 생성자에 5를 전달한 strBuilder4는 지정된 대로 용량이 5로 설정됩니다.
예제 2: 용량 지정의 효과 확인하기
이번에는 기본 생성과 용량을 지정한 생성을 비교해 보겠습니다.
using System;
using System.Text;
public class Demo {
public static void Main(String[] args){
StringBuilder strBuilder = new StringBuilder();
Console.WriteLine("StringBuider capacity = "+strBuilder.Capacity);
StringBuilder strBuilder2 = new StringBuilder(20);
Console.WriteLine("StringBuider2 capacity = "+strBuilder2.Capacity);
}
}출력 결과
실행 결과는 다음과 같습니다.
StringBuider capacity = 16 StringBuider2 capacity = 20
정리
StringBuilder 생성자에 정수 값을 전달하면 해당 값만큼의 초기 용량을 가진 객체가 생성됩니다. 용량을 미리 지정하면 문자열이 늘어날 때마다 발생하는 내부 버퍼 확장 작업을 줄일 수 있어, 대용량 문자열을 반복적으로 추가하는 상황에서 성능 최적화에 큰 도움이 됩니다.