C#에서 StringBuilder 객체의 용량(Capacity)을 확인하려면 Capacity 속성을 사용하면 됩니다. 이 속성은 현재 인스턴스가 할당한 메모리에 저장할 수 있는 최대 문자 수를 반환합니다.
StringBuilder를 매개변수 없이 생성하면 기본 초기 용량은 16으로 설정됩니다. 아래 예제 코드를 통해 실제로 어떻게 동작하는지 살펴보겠습니다.
예제 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();
Console.WriteLine("Capacity of StringBuilder1 = " + strBuilder1.Capacity);
Console.WriteLine("Capacity of StringBuilder2 = " + strBuilder2.Capacity);
Console.WriteLine("Capacity of StringBuilder3 = " + strBuilder3.Capacity);
strBuilder2 = strBuilder3;
Console.WriteLine("Is StringBuilder3 equal to StringBuilder2? = " + strBuilder3.Equals(strBuilder2));
}
}실행 결과
Capacity of StringBuilder1 = 16 Capacity of StringBuilder2 = 16 Capacity of StringBuilder3 = 16 Is StringBuilder3 equal to StringBuilder2? = True
코드 설명
문자열이 몇 글자이든 상관없이, 별도의 용량을 지정하지 않은 StringBuilder는 모두 기본 용량인 16을 가집니다. 또한 strBuilder2 = strBuilder3;처럼 객체를 할당하면 두 변수가 같은 인스턴스를 참조하게 되므로, Equals() 메서드 비교 결과는 True가 됩니다.
예제 2: 생성자로 용량을 직접 지정한 경우
StringBuilder 생성자에 숫자 값을 전달하면 초기 용량을 원하는 크기로 설정할 수 있습니다. 다음 예제를 확인해 보세요.
using System;
using System.Text;
public class Demo {
public static void Main(String[] args) {
StringBuilder strBuilder1 = new StringBuilder("Amy");
StringBuilder strBuilder2 = new StringBuilder("Katie");
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
코드 설명
위 결과에서 주목할 점은 new StringBuilder(5)로 생성한 strBuilder4입니다. 생성자에 정수 값 5를 전달했기 때문에 이 객체의 초기 용량은 기본값 16이 아닌 5로 설정됩니다.
참고: 용량(Capacity)과 길이(Length)의 차이
- Length: 현재 StringBuilder에 실제로 저장된 문자열의 길이입니다.
- Capacity: 내부 버퍼가 현재 할당받아 담을 수 있는 최대 문자 수입니다.
저장되는 문자열이 현재 용량을 초과하면, StringBuilder는 자동으로 용량을 늘려(일반적으로 두 배 크기로 확장) 더 많은 데이터를 수용합니다. 따라서 문자열 연결 작업이 많다면, 미리 적절한 초기 용량을 지정해 불필요한 메모리 재할당과 성능 저하를 줄이는 것이 좋습니다.