문자열 - System.Text.StringBuilder 클래스
String 클래스는 한번 메모리에 데이터를 할당하면 값을 변경할 수 없다.
만약, String 클래스에 문자열을 추가한다면 추가된 문자열을 다시 할당하는 방식으로 문자열을 관리한다. 따라서 문자열을 반복적으로 수정해야 하는 경우 String 개체를 사용하면 개체를 새로 만드는 작업으로 인한 오버헤드가 커질 수 있다.
개체를 새로 만들지 않고 문자열을 수정하려면 System.Text.StringBuilder 클래스를 사용하는 것이 좋다.
StringBuilder 개체를 사용하면 많은 문자열을 루프에 연결함으로써 성능을 높일 수 있다. StringBuilder는 캡슐화하는 문자열의 문자수를 확장할 수 있는 동적 개체지만, 필요하다면 개체가 가질 수 있는 문자의 최대수를 값으로 지정할 수도 있다.
이 값을 개체의 용량이라고 하며 용량은 현재 StringBuilder에 있는 문자열의 길이와는 다르다. 용량을 지정하면 StringBuilder의 데이터를 수정할 때 크기가 다시 할당되지 않는다. 하지만 용량에 도달하게 되면 새로운 공간이 자동으로 할당되게 되고 용량이 두 배로 늘어난다.
StringBuilder를 사용하기 위해서는 명시적으로 개체를 생성해야 한다.
Dim str As New System.Text.StringBuilder()
' 용량을 지정한 선언
Dim str1 As New System.Text.StringBuilder(15)
' Capacity 속성을 사용하여 용량을 지정
Dim str2 As New System.Text.StringBuilder()
str2.Capacity = 15
문자열 끝에 문자를 추가할 때는 Append 메서드를 사용한다.
Dim str As New System.Text.StringBuilder()
str.Append("Hellow world!")
이 때 추가되는 문자열에 포맷(숫자, 날짜/시간 및 열거형 등)을 지정하여 추가할 수 있는데 AppendFormat 메서드를 사용한다.
Dim str As New StringBuilder()
str.Append("Cost : ")
str.AppendFormat("{0:c}", 25)
' 출력되는 값은 Cost : \25
또한 Insert 메서드를 사용하면 문자열을 추가할 때 지정된 위치에 문자열을 추가할 수 있다.
Dim str As New StringBuilder()
str.Append("문자열 테스트 중")
str.Insert(3, " 개체")
' 출력값은 '문자열 개체 테스트 중'
모든 수정이 끝난 StringBuilder 개체를 문자열로 가져올 때는 ToString 메서드를 사용한다.
Dim str As New StringBuilder()
str.Append("문자열 테스트 중")
Console.WrtieLine(str.ToString())