Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 StringBuilder의 길이를 구하는 방법 – Length 속성 활용법

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)은 여유 공간을 포함한 버퍼 크기라고 이해하면 됩니다.