C#에서 StringBuilder란?
C#에서 StringBuilder는 변경 가능한(mutable) 문자열을 효율적으로 처리하기 위해 사용되는 클래스입니다. 일반적인 string 타입은 불변(immutable)이기 때문에 문자열을 반복적으로 수정할 때마다 새로운 객체가 생성되어 성능이 저하될 수 있습니다. 반면 StringBuilder는 내부 버퍼를 활용해 문자열을 효율적으로 조작할 수 있게 해줍니다.
StringBuilder를 사용하려면 먼저 System.Text 네임스페이스를 포함해야 하며, new 키워드를 통해 인스턴스를 생성합니다. 문자열을 초기값으로 전달하거나, 초기 용량(capacity)을 지정하는 등 다양한 방식으로 객체를 만들 수 있습니다.
예제 1: 두 StringBuilder 객체 비교하기
다음은 C#에서 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");
Console.WriteLine("Is StringBuilder1 equal to StringBuilder2? = "+strBuilder1.Equals(strBuilder2));
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Is StringBuilder1 equal to StringBuilder2? = False
"Tim"과 "Tom"이라는 서로 다른 문자열로 생성된 두 StringBuilder 객체는 값이 같지 않으므로 False가 반환됩니다.
예제 2: 다양한 방식으로 StringBuilder 생성하기
이번에는 여러 가지 생성자를 활용해 StringBuilder를 만들고, 각 인스턴스의 용량(Capacity)을 확인하는 예제를 살펴보겠습니다.
using System;
using System.Text;
public class Demo {
public static void Main(String[] args) {
StringBuilder strBuilder1 = new StringBuilder("John");
StringBuilder strBuilder2 = new StringBuilder("John");
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("John") : 문자열을 초기값으로 지정하여 StringBuilder를 생성합니다. 별도로 용량을 지정하지 않으면 기본 용량인 16이 설정됩니다.
- new StringBuilder() : 아무 값 없이 빈 StringBuilder를 생성합니다. 기본 용량은 마찬가지로 16입니다.
- new StringBuilder(5) : 초기 용량을 5로 직접 지정하여 StringBuilder를 생성합니다. 따라서 Capacity 값이 5로 출력됩니다.
- Equals() 메서드 : 두 StringBuilder 인스턴스가 동일한 값을 갖는지 비교합니다. strBuilder2에 strBuilder3를 할당한 후에는 두 변수가 같은 인스턴스를 참조하게 되므로 True가 반환됩니다.
마무리
이처럼 C#에서는 StringBuilder 생성자를 활용해 문자열 초기화, 빈 객체 생성, 용량 지정 등 다양한 방식으로 인스턴스를 만들 수 있습니다. 문자열 연결이나 수정 작업이 많은 프로그램에서는 StringBuilder를 활용하는 것이 성능 면에서 훨씬 유리하다는 점을 기억하세요.