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

C#에서 StringBuilder의 용량(Capacity)을 확인하는 방법

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는 자동으로 용량을 늘려(일반적으로 두 배 크기로 확장) 더 많은 데이터를 수용합니다. 따라서 문자열 연결 작업이 많다면, 미리 적절한 초기 용량을 지정해 불필요한 메모리 재할당과 성능 저하를 줄이는 것이 좋습니다.