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

C# StringBuilder.EnsureCapacity() 메서드 완벽 정리 – 구문과 실전 예제


개요

C#의 StringBuilder.EnsureCapacity() 메서드는 현재 StringBuilder 인스턴스의 용량(capacity)이 지정된 값 이상이 되도록 보장하는 역할을 합니다. 문자열을 반복적으로 추가하거나 수정하는 상황에서 내부 버퍼가 자주 재할당되는 것을 미리 방지할 수 있어, 성능 최적화에 유용하게 활용됩니다.

만약 지정한 값이 현재 용량보다 작거나 같으면 용량에는 아무런 변화가 없으며, 메서드는 실제로 확보된 용량을 int 값으로 반환합니다.

구문

기본 구문은 다음과 같습니다 −

public int EnsureCapacity (int capacity);

여기서 매개변수 capacity는 확보하고자 하는 최소 용량을 의미합니다.

예제 1

먼저 간단한 사용 예제를 살펴보겠습니다 −

using System;
using System.Text;
public class Demo{
    public static void Main(){
        StringBuilder strBuilder = new StringBuilder("jhbjhb");
        Console.WriteLine("String = "+strBuilder);
        Console.WriteLine("StringBuilder capacity= "+strBuilder.Capacity);
        strBuilder.EnsureCapacity(20);
        Console.WriteLine("StringBuilder capacity= "+strBuilder.Capacity);
        char[] arr = new char[5] {'a', 'b', 'c', 'd', 'e'};
        strBuilder.CopyTo(1, arr, 1, 3);
        Console.WriteLine("\nCopied String in char array...");
        Console.WriteLine(arr);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −

String = jhbjhb
StringBuilder capacity= 16
StringBuilder capacity= 20
Copied String in char array...
ahbje

초기 StringBuilder의 기본 용량은 16이지만, EnsureCapacity(20) 호출 후 용량이 20으로 늘어난 것을 확인할 수 있습니다.

예제 2

이번에는 용량과 길이(length)의 차이를 함께 확인하는 예제입니다 −

using System;
using System.Text;
public class Demo{
    public static void Main(){
        StringBuilder strBuilder = new StringBuilder("Katie");
        Console.WriteLine("String = "+strBuilder);
        Console.WriteLine("\nStringBuilder capacity = "+strBuilder.Capacity);
        Console.WriteLine("StringBuilder length = "+strBuilder.Length);
        strBuilder.EnsureCapacity(35);
        Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
        Console.WriteLine("StringBuilder length = "+strBuilder.Length);
        strBuilder.EnsureCapacity(0);
        strBuilder.Length = 0;
        Console.WriteLine("\nStringBuilder capacity= "+strBuilder.Capacity);
        Console.WriteLine("StringBuilder length = "+strBuilder.Length);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −

String = Katie
StringBuilder capacity = 16
StringBuilder length = 5
StringBuilder capacity= 35
StringBuilder length = 5
StringBuilder capacity= 35
StringBuilder length = 0

핵심 포인트 정리

  • EnsureCapacity()는 요청한 최소 용량보다 작을 경우에만 버퍼를 확장합니다.
  • 현재 용량이 이미 충분하면 아무 동작도 수행하지 않습니다.
  • 용량(capacity)은 저장 가능한 최대 문자 수를 의미하고, 길이(length)는 실제 저장된 문자 수를 의미하므로 두 개념을 구분해야 합니다.
  • 문자열을 대량으로 반복해서 연결할 때 사전에 용량을 확보하면 불필요한 메모리 재할당을 줄여 성능을 향상시킬 수 있습니다.