StringBuilder 클래스 프로그래밍/C#2016. 7. 9. 17:43
.NET Framework에서 StringBuilder 클래스
https://msdn.microsoft.com/ko-kr/library/2839d5h5(v=vs.110).aspx
1. String 개체는 변경할 수 없습니다(immutable).
2. System.String 클래스에서 메소드의 하나를 사용할 때마다 메모리에서 새 문자열 개체를 만들어지므로, 해당 새 개체에 대한 공간이 새로 할당됩니다.
3. 문자열을 반복적으로 수정해야 하는 경우, 새 문자열 개체를 만드는데 필요한 오버헤드가 증가하게 됩니다(costly).
4. System.Text.StringBuilder 클래스는 새 개체를 만들지 않고 문자열을 수정하고 싶을 때 사용될 수 있습니다.
5. 예를 들어 StringBuilder 클래스를 사용하면 루프에서 많은 문자열을 연결할 때 성능이 향상될 수 있습니다.
<System.Type 네임스페이스 가져오기>
1. StringBuilder 클래스는 System.Text 네임스페이스에 있습니다.
2. 코드에서 정규화된 형식 이름(a fully qualified type name)을 제공할 필요가 없도록 하려면 System.Text 네임스페이스를 가져올 수 있습니다.
using System; using System.Text;
<StringBuilder 개체 인스턴스화>
1. 다음 예제와 같이 오버로드된 생성자 메서드 중 하나로 변수를 초기화하여 StringBuilder 클래스의 새 인스턴스를 만들 수 있습니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
<용량 및 길이 설정>
1. StringBuilder는 캡슐화되는 문자열에서 문자 수를 확장할 수 있는 동적 개체(a dynamic object)이지만, 보관할 수 있는 최대 문자 수 값을 지정할 수 있습니다.
2. 이 값을 개체의 용량(the object of the capacity)이라고 하며, 현재 StringBuilder에 보관된 문자열의 길이와 혼동하지 마세요.
3. 예를 들어 길이가 5인 "Hello" 문자열을 사용하여 StringBuilder 클래스의 새 인스턴스를 만들고 개체의 최대 용량(a maximum capacity)을 25로 지정할 수 있습니다.
4. StringBuilder를 수정할 경우, 용량에 도달할 때까지 자체 크기(size for itself)를 재할당(reallocate) 할 수 없습니다.
5. 이 경우 새 공간이 자동으로 할당되고 용량은 두 배로 증가합니다.
6. 오버로드된 생성자 중 하나를 사용하여 StringBuilder 클래스의 용량을 지정할 수 있습니다.
7. 다음 예에서는 MyStringBuilder 개체를 최대 25개 공간으로 확장할 수 있도록 지정합니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);
8. 또한(Additionally) 읽기/쓰기 Capacity 속성을 사용하여 개체의 최대 길이를 설정할 수 있습니다.
9. 다음 예에서는 Capacity 속성을 사용하여 최대 개체 길이를 정의합니다.
MyStringBuilder.Capacity = 25;
10. EnsureCapacity 메서드를 사용하여 현재 StringBuilder의 용량을 확인할 수 있습니다.
11. 용량이 전달된 값보다 크면 변경되지 않고, 용량이 전달된 값보다 작으면 현재 용량이 전달된 값과 일치하도록 변경됩니다.
12. Length 속성을 보거나(view) 설정할(set) 수도 있습니다.
13. Length 속성을 Capacity 속성보다 큰 값으로 설정하면 Capacity 속성이 Length 속성과 동일한 값으로 자동으로 변경됩니다.
14. Length 속성을 현재 StringBuilder 내의 문자열 길이보다 작은 값으로 설정하면 문자열이 단축됩니다
<StringBuilder 문자열 수정>
1. 다음 표에서는 StringBuilder의 내용을 수정하는 데 사용할 수 있는 메서드를 보여 줍니다.
메서드 이름 | 기능 |
---|---|
현재 StringBuilder의 끝에 정보를 추가합니다. | |
문자열에 전달된 서식 지정자를 서식 있는 텍스트로 바꿉니다. | |
현재 StringBuilder의 지정된 인덱스에 문자열 또는 개체를 삽입합니다. | |
현재 StringBuilder에서 지정된 수의 문자를 제거합니다. | |
지정된 인덱스에서 지정된 문자를 바꿉니다. |
<Append>
1. Append 메서드를 사용하여 현재 StringBuilder에 표시되는 문자열의 끝에 개체의 문자열 표현이나 텍스트를 추가(append)할 수 있습니다.
2. 다음 예에서는 StringBuilder를 "Hello World"로 초기화한 다음 개체의 끝에 일부 텍스트를 추가합니다.
3. 필요한 경우 공간이 자동 할당(allocate)됩니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a beautiful day."); Console.WriteLine(MyStringBuilder); // The example displays the following output: // Hello World! What a beautiful day.
<AppendFormat>
1. String.AppendFormat 메서드는 StringBuilder 개체의 끝에 텍스트를 추가합니다.
2. 서식 지정할 개체의 IFormattable 구현을 호출하여 복합 서식 지정 기능을 지원합니다. 자세한 내용은 복합 형식 지정 참조
3. 따라서, 숫자, 날짜 및 시간, 열거형 값에 대한 표준 서식 문자열, 숫자, 날짜 및 시간 값에 대한 사용자 지정 서식 문자열, 사용자 지정 형식에 대해 정의된 서식 문자열을 허용합니다.
4. 서식 지정에 대한 자세한 내용은 .NET Framework의 형식 서식 지정을 참조하세요.
5. 이 메서드를 사용하여 변수의 서식을 사용자 지정하고 해당 갓을 StringBuilder에 추가할 수 있습니다.
6. 다음 예제에서는 AppendFormat 메서드를 사용하여 통화 값으로 서식 지정된 정수 값을 StringBuilder 개체의 끝에 배치합니다.
int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is "); MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder); // The example displays the following output: // Your total is $25.00
<Insert>
1. Insert 메서드는 문자열 또는 객체를 현재 StringBuilder 객체의 지정된 위치에 추가합니다.
2. 다음 예제에서는 이 메서드를 사용하여 StringBuilder 객체의 여섯 번째 위치에 단어를 삽입합니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful "); Console.WriteLine(MyStringBuilder); // The example displays the following output: // Hello Beautiful World!
<Remove>
1. Remove 메서드를 사용하여 지정된 0부터 시작하는 인덱스를 시작으로 현재 StringBuilder 객체에서 지정된 수의 문자를 제거할 수 있습니다.
2. 다음 예제에서는 Remove 메서드를 사용하여 StringBuilder 객체를 단축합니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7); Console.WriteLine(MyStringBuilder); // The example displays the following output: // Hello
<Replace>
1. Replace 메서드는 StringBuilder 객체 내의 문자를 다른 지정된 문자로 바꾸는 데 사용할 수 있습니다.
2. 다음 예제에서는 Replace 메서드를 사용하여 StringBuilder 객체에서 느낌표 문자(!)의 모든 인스턴스를 검색한 다음 물음표 문자(?)로 바꿉니다.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace('!', '?'); Console.WriteLine(MyStringBuilder); // The example displays the following output: // Hello World?
<StringBuilder 개체를 문자열로 변환>
1. StringBuilder 객체에 표시되는 문자열을 String 매개 변수를 가진 메서드에 전달하거나 사용자 인터페이스에 표시하려면 StringBuilder 객체를 String 객체로 변환해야 합니다.
2. StringBuilder.ToString 메서드를 호출하여 이 변환을 수행합니다.
3. 다음 예제에서는 다양한 StringBuilder 메서드를 호출한 다음 StringBuilder.ToString() 메서드를 호출하여 문자열을 표시합니다.
using System; using System.Text; public class Example { public static void Main() { StringBuilder sb = new StringBuilder(); bool flag = true; string[] spellings = { "recieve", "receeve", "receive" }; sb.AppendFormat("Which of the following spellings is {0}:", flag); sb.AppendLine(); for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) { sb.AppendFormat(" {0}. {1}", ctr, spellings[ctr]); sb.AppendLine(); } sb.AppendLine(); Console.WriteLine(sb.ToString()); } } // The example displays the following output: // Which of the following spellings is True: // 0. recieve // 1. receeve // 2. receive
'프로그래밍 > C#' 카테고리의 다른 글
LINQ 정리 (1) | 2016.07.28 |
---|---|
형 변환 예제 (0) | 2016.07.10 |
대리자 Action, Func (0) | 2016.07.08 |
String.Format 메서드 (0) | 2016.06.28 |
String 클래스 (0) | 2016.06.22 |