StringBuilder란?
C#의 StringBuilder는 변경할 수 없는 string과 달리 변경 가능한 문자열을 나타내는데 사용하는 클래스입니다. string 객체는 값이 변경되면 메모리에서 이전 참조 값을 버리고 새로운 참조 값으로 변경되지만, StringBuilder 객체는 참조 값이 변경되지 않고 힙 메모리에서 값이 삽입, 추가, 제거됩니다.
이번 포스팅에서는 StringBuilder 클래스 사용 방법을 설명합니다.
관련 포스팅
☞ [C#]Mutable과 Immutable(가변과 불변)
☞ [C#]값 형식(Value Types)과 참조 형식(Reference Types)
StringBuilder 객체 생성 및 초기화
StringBuilder 클래스는 System.Text
네임스페이스의 객체이므로 using문에 다음과 같이 System.Text
를 추가합니다.
using System.Text;
StringBuilder 객체 선언 및 초기화는 일반 객체와 동일합니다. 다음은 StringBuilder 객체를 생성과 생성과 초기화를 함께 하는 예제입니다.
// StringBuilder 객체 생성
StringBuilder strBuilder = new StringBuilder();
// StringBuilder 객체 생성과 초기화
StringBuilder strBuilderInit = new StringBuilder("Init StringBuilder");
StringBuilder 용량
StringBuilder 클래스는 문자 공간을 동적으로 확장합니다. 초기 용량을 설정하고 싶은 경우 StringBuilder 클래스의 오버로드 생성자에서 사이즈를 설정할 수 있습니다.
// 용량을 10으로 설정합니다.
StringBuilder strBuilderCapacity = new StringBuilder(10);
// 용량을 10, 최대 용량을 50으로 설정합니다.
StringBuilder strBuilderMaxCapacity = new StringBuilder(10, 50);
// 문자열을 "Init"으로 초기화하고 용량을 10으로 설정합니다.
StringBuilder strBuilderINIT = new StringBuilder("Init", 10);
StringBuilder 객체의 용량과 최대 용량은 StringBuilder 클래스의 Capacity
와 MaxCapacity
프로퍼티로 확인할 수 있습니다.
Console.WriteLine("strBuilderMaxCapacity.Capacity: " + strBuilderMaxCapacity.Capacity);
Console.WriteLine("strBuilderMaxCapacity.MaxCapacity: " + strBuilderMaxCapacity.MaxCapacity);
StringBuilder 객체의 기본 용량은 16이며, 최대 용량은 int형의 최댓값인 2,147,483,647입니다.
StringBuilder 클래스의 메서드
StringBuilder의 문자열을 변경하는 경우 다음 메서드를 사용할 수 있습니다.
문자열 변경 메서드
- Append(): 문자열을 StringBuilder 객체의 끝에 추가합니다.
- Insert(): 문자열을 지정된 인덱스에 삽입합니다.
- Remove(): 지정된 인덱스에서 지정된 길이만큼 문자열을 삭제합니다.
- Replace(): 지정된 문자열을 특정 문자열로 변경합니다.
▶ Append() 메서드
Append()
메서드에 전달한 문자열을 StringBuilder 객체의 끝에 추가합니다. AppendLine()
메서드를 사용하면, 추가되는 문자열 끝에 개행 문자가 추가됩니다.
다음은 Append()
메서드와 AppendLine()
메서드를 사용한 예제입니다.
class Program
{
static void Main(string[] args)
{
StringBuilder strBuilder = new StringBuilder("Init StringBuilder ");
Console.WriteLine("Append() 호출 전: " + strBuilder);
strBuilder.Append("Value1");
strBuilder.AppendLine("Value2");
strBuilder.AppendLine("Value3");
Console.WriteLine("Append() 호출 후: " + strBuilder);
}
}
실행 결과
▶ Insert() 메서드
Insert()
메서드는 지정된 인덱스 위치에 지정된 문자열을 삽입합니다. 다음은 Insert()
메서드 사용 예제입니다.
class Program
{
static void Main(string[] args)
{
StringBuilder strBuilder = new StringBuilder("StringBuilder");
Console.WriteLine("Insert() 호출 전: " + strBuilder);
strBuilder.Insert(0, "Init ");
strBuilder.Insert(strBuilder.Length, " Value");
Console.WriteLine("Insert() 호출 후: " + strBuilder);
}
}
실행 결과
▶ Remove() 메서드
Remove()
메서드는 지정된 인덱스 위치에서 시작하여 지정된 길이만큼 문자열을 제거합니다. 다음은 Remove()
메서드 사용 예제입니다.
class Program
{
static void Main(string[] args)
{
StringBuilder strBuilder = new StringBuilder("Init StringBuilder ");
Console.WriteLine("Remove() 호출 전: " + strBuilder);
strBuilder.Remove(4, 15);
Console.WriteLine("Remove() 호출 후: " + strBuilder);
}
}
실행 결과
▶ Replace() 메서드
Replace()
메서드는 특정 문자열을 지정된 문자열로 변경합니다. 다음은 Replace()
메서드 사용 예제입니다.
class Program
{
static void Main(string[] args)
{
StringBuilder strBuilder = new StringBuilder("StringBuilder");
Console.WriteLine("Replace() 호출 전: " + strBuilder);
strBuilder.Replace("Builder", "");
Console.WriteLine("Replace() 호출 후: " + strBuilder);
}
}
실행 결과
StringBuilder 클래스를 사용하는 경우
- 추가되는 문자열의 개수가 동적인 경우 StringBuilder 클래스를 사용합니다.
- 문자열에 대해 변경 사항이 많은 경우 StringBuilder 클래스를 사용합니다.
- 단, 문자열의 갯수가 고정인 경우에는 string 클래스 사용하는 것을 권장합니다. StringBuilder 클래스는 동적이라는 장점이 있지만, 동적으로 처리하는 과정이 성능상 좋지 않습니다.
'C#' 카테고리의 다른 글
[C#]동적 변수(dynamic) (0) | 2022.02.05 |
---|---|
[C#]익명 타입(Anonymous Type) (0) | 2022.02.05 |
[C#]List 특정 값 존재하는지 체크하는 방법 (1) | 2022.01.24 |
[C#]Mutable과 Immutable(가변과 불변) (1) | 2022.01.18 |
[C#]인덱서 사용 방법 (0) | 2022.01.17 |
댓글