C#에서 StringBuilder 객체의 길이를 확인하려면 Length 속성을 사용하면 됩니다. StringBuilder는 문자열을 효율적으로 조작하기 위한 클래스로, 다음과 같은 주요 속성을 제공합니다.
- Length: 현재 실제로 저장된 문자의 개수
- Capacity: 내부적으로 할당된 버퍼의 크기
- MaxCapacity: 이론상 가질 수 있는 최대 용량(int.MaxValue = 2147483647)
아래 예제를 통해 네 가지 서로 다른 방식으로 생성한 StringBuilder 객체들의 길이와 용량을 비교해 보겠습니다.
예제 1
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("StringBuider1 maximum capacity = "+strBuilder1.MaxCapacity);
Console.WriteLine("StringBuider1 length = "+strBuilder1.Length);
Console.WriteLine("StringBuider2 capacity = "+strBuilder2.Capacity);
Console.WriteLine("StringBuider2 maximum capacity = "+strBuilder2.MaxCapacity);
Console.WriteLine("StringBuider2 length = "+strBuilder2.Length);
Console.WriteLine("StringBuider3 capacity = "+strBuilder3.Capacity);
Console.WriteLine("StringBuider3 maximum capacity = "+strBuilder3.MaxCapacity);
Console.WriteLine("StringBuider3 length = "+strBuilder3.Length);
Console.WriteLine("StringBuider4 capacity = "+strBuilder4.Capacity);
Console.WriteLine("StringBuider4 maximum capacity = "+strBuilder4.MaxCapacity);
Console.WriteLine("StringBuider4 length = "+strBuilder4.Length);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Is StringBuilder3 equal to StringBuilder2? = True StringBuider1 capacity = 16 StringBuider1 maximum capacity = 2147483647 StringBuider1 length = 3 StringBuider2 capacity = 16 StringBuider2 maximum capacity = 2147483647 StringBuider2 length = 0 StringBuider3 capacity = 16 StringBuider3 maximum capacity = 2147483647 StringBuider3 length = 0 StringBuider4 capacity = 5 StringBuider4 maximum capacity = 2147483647 StringBuider4 length = 0
결과를 살펴보면 몇 가지 흥미로운 점을 발견할 수 있습니다. 문자열 "Amy"로 생성한 strBuilder1의 길이는 3이지만, 기본 용량(Capacity)은 16으로 자동 할당됩니다. 반면 초기 용량을 5로 지정한 strBuilder4는 Capacity가 정확히 5로 설정됩니다. 또한 strBuilder2에 빈 객체인 strBuilder3를 대입하면 두 객체가 동일해지므로 Equals 비교 결과가 True가 되고, 길이도 0으로 출력됩니다.
예제 2
이번에는 다른 문자열들을 사용해 Length와 Capacity의 관계를 더 자세히 확인해 보겠습니다.
using System;
using System.Text;
public class Demo {
public static void Main(String[] args) {
StringBuilder strBuilder1 = new StringBuilder("hbjhbkjhbm");
StringBuilder strBuilder2 = new StringBuilder("TomHanks");
StringBuilder strBuilder3 = new StringBuilder();
Console.WriteLine("Capacity of StringBuilder1 = "+strBuilder1.Capacity);
Console.WriteLine("Length of StringBuilder1 = "+strBuilder1.Length);
Console.WriteLine("
Capacity of StringBuilder2 = "+strBuilder2.Capacity);
Console.WriteLine("Length of StringBuilder2 = "+strBuilder2.Length);
Console.WriteLine("
Capacity of StringBuilder3 = "+strBuilder3.Capacity);
Console.WriteLine("Length of StringBuilder3 = "+strBuilder3.Length);
}
}출력 결과
실행하면 아래와 같은 결과를 얻을 수 있습니다.
Capacity of StringBuilder1 = 16 Length of StringBuilder1 = 10 Capacity of StringBuilder2 = 16 Length of StringBuilder2 = 8 Capacity of StringBuilder3 = 16 Length of StringBuilder3 = 0
정리
10글자 문자열과 8글자 문자열 모두 Capacity가 16인 이유는, StringBuilder가 생성 시 별도의 용량을 지정하지 않으면 기본값 16을 사용하기 때문입니다. 문자열이 추가되어 Capacity를 초과하면 StringBuilder는 내부 버퍼를 자동으로 확장합니다. 따라서 길이(Length)는 실제 데이터 크기, 용량(Capacity)은 여유 공간을 포함한 버퍼 크기라고 이해하면 됩니다.