개요
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)는 실제 저장된 문자 수를 의미하므로 두 개념을 구분해야 합니다.
- 문자열을 대량으로 반복해서 연결할 때 사전에 용량을 확보하면 불필요한 메모리 재할당을 줄여 성능을 향상시킬 수 있습니다.