C#

[C#]StringBuilder 사용 방법

DevStory 2022. 2. 5.

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 클래스의 CapacityMaxCapacity 프로퍼티로 확인할 수 있습니다.

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

댓글