[StringBuilder] C# StringBuilder 사용하기.
StringBuilder 클래스
String 개체는 변경할 수 없습니다. System.String 클래스에서 메서드 중 하나를 사용할 때마다 메모리에 새 문자열
개체가 생성되므로, 새 개체에 대한 공간을 새로 할당해야 합니다. 문자열을 반복적으로 수정해야 하는 경우 새로운
String 개체 생성과 관련된 오버헤드로 인해 비용이 증가할 수 있습니다. 새 개체를 만들지 않고 문자열을 수정하려는
경우 System.Text.StringBuilder 클래스를 사용할 수 있습니다.
예를 들어 StringBuilder 클래스를 사용하면 루프에서 많은 문자열을 연결할 때 성능이 향상될 수 있습니다.
출처 : https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/stringbuilder
위 말을 정리하면 우리가 흔히 사용하는 String개체를 아래와 같이 string 변수를 합치거나,
string temp = "";
for(int i = 0; i < 10; i++)
{
temp += i.ToString() + ",";
}
temp = temp.Substring(0, temp.Length - 1);
아래와 같이 변수값을 여러 번 수정하게 되면
string temp = "";
temp = "";
temp = "안녕";
temp = "하세요.";
temp = "반갑습니다.";
새로운 String개체가 생성하게 되고, 이전의 문자열 객체는 GC(가비지 컬렉터)에 의해 수집대상이 됩니다.
이는 메모리 낭비로 이어지고 부하가 발생하게 됩니다.
이때 사용할 수 있는 것이 StringBuilder 클래스입니다.
Stringbuilder를 사용하면 문자열을 조합할 때마다 새로운 변수를 생성할 필요없고,
Stringbuilder 내부 자체적으로 함수를 가지고 있어서 값들을 조합하고 삭제할 때 인스턴스를 추가발생시키지 않습니다.
따라서 메모리 낭비를 줄일 수 있습니다.
StringBuilder sb = new StringBuilder();
sb.Append("");
sb.Append("안녕");
sb.Append("하세요.");
sb.Append("반갑습니다.");
위와 같이 간단하게 StringBuilder클래스를 선언하고 사용할 수 있습니다.
StringBuilder 클래스 메소드
StringBuilder.Append() : 문자열을 뒤에 추가합니다.
StringBuilder.Insert() : StringBuilder클래스에 10개의 문자열이 추가되었다고 가정했을 때,
4번째 문자열에 "얌얌" 이라는 문자열을 추가하고 싶을 때 사용합니다.
StringBuilder.Insert(4,"얌얌");
StringBuilder.Remove() : StringBuilder클래스에 추가된 문자열을 나열하고, 문자 범위를 지정하면
해당 범위만큼 문자 또는 문자열이 삭제됩니다.
StringBuilder.Append("abcdefg");
StringBuilder.Remove(2,3) = 3번째 문자부터 시작해서 2개의 문자를 삭제.
결과 : "abfg"
StringBuilder.Replace() : StringBuilder클래스에 추가된 문자열을 나열하고, 지정된 문자 또는 문자열을
다른 문자 또는 문자열로 수정합니다.
StringBuilder.Append("abcdefg");
StringBuilder.Replace("bc","1111")
결과 : "a1111defg"
Capacity / MaxCapacity 속성
Capacity 속성 : StringBuilder클래스 용량를 선언할 수 있습니다.
만약, 선언된 문자열 크기보다 Append()된 문자열이 클 경우 자동으로 용량을 증가시킵니다.
StringBuilder sb = new StringBuilder(40);
sb.Capacity = 50;
MaxCapacity 속성 : StringBuilder클래스 선언시 Capacity속성값과 함께 최대 용량을 선언합니다.
선언하지 않을 경우 기본 용량은 2,147,483,647 입니다.
(MaxCapacity 속성의 최대값은 Int32의 2,147,483,647 입니다.)
StringBuilder sb = new StringBuilder(40, 1000);
= StringBuilder클래스를 40만큼 용량으로 최대 1000용량으로 선언.
만약 최대 용량을 초과하게 되면 다음과 같은 오류가 발생합니다.
오늘은 StringBuilder클래스에 대해 알아봤습니다. 상황에 따라 StringBuilder클래스를 사용한다면
메모리 관리을 더 효율적으로 할 수 있을 겁니다.
이상 사이버지식정보방이었습니다.