[Study][C#] String과 StringBuilder

LimJaeJun·2024년 1월 30일

Study

목록 보기
10/16

문자열은 프로그래밍에서 중요한 데이터 타입 중 하나이며, C#에서는 string과 StringBuilder 두 가지 클래스를 제공하여 문자열을 다룹니다. 이 두 클래스는 각각 특정한 상황에서 유용하게 활용됩니다.

String

String의 불변성

string 클래스는 불변(Immutable)한 특성을 가지고 있습니다. 이는 문자열이 한 번 생성되면 변경할 수 없다는 것을 의미합니다. 문자열을 수정하면 새로운 문자열이 생성되며, 기존의 문자열은 변경되지 않습니다. 이러한 불변성은 여러 가지 장점을 가지고 있습니다.

예제

string str1 = "Hello";
string str2 = str1 + " World"; // 새로운 문자열 생성

Console.WriteLine(str1); // 출력: Hello
Console.WriteLine(str2); // 출력: Hello World

문자열 조작

string 클래스는 문자열을 조작하고 검색하는 다양한 메서드를 제공합니다. 예를 들면 Substring, IndexOf, Replace 등이 있습니다.

예제

string original = "C# Programming";

string subString = original.Substring(2, 4); // " Programming"
int index = original.IndexOf("Programming"); // 3
string replaced = original.Replace("C#", "Java"); // "Java Programming"

문자열 합치기

문자열을 합칠 때 + 연산자를 사용할 수 있지만, 반복적인 문자열 연산이 많은 경우 성능에 영향을 미칠 수 있습니다.

StringBuilder

StringBuilder의 가변성

StringBuilder 클래스는 가변(Mutable)한 특성을 가지고 있습니다. 이는 문자열을 직접 수정할 수 있음을 의미합니다. StringBuilder는 동적으로 크기가 조정되며, 문자열의 수정이 가능합니다.

예제

StringBuilder stringBuilder = new StringBuilder("Hello");
stringBuilder.Append(" World"); // 기존 문자열을 직접 수정

Console.WriteLine(stringBuilder.ToString()); // 출력: Hello World

성능 향상

StringBuilder는 문자열을 조작할 때 메모리에 새로운 문자열을 계속 생성하지 않고, 기존의 버퍼를 활용하여 성능을 향상시킵니다.

예제

StringBuilder stringBuilder = new StringBuilder();

for (int i = 0; i < 10000; i++)
{
    stringBuilder.Append(i.ToString());
}

string result = stringBuilder.ToString(); // 새로운 문자열 생성

언제 사용할까?

String

문자열이 변경되지 않고 읽기 전용일 경우.
문자열 조작이 적고, 메모리 사용량이 크게 증가하지 않을 경우.

StringBuilder

문자열이 동적으로 변경되며, 연산이 빈번하게 발생하는 경우.
문자열 조작이 많은 연산이 필요한 경우.
문자열을 다룰 때는 상황에 맞게 string과 StringBuilder를 선택하여 성능을 최적화하고 메모리를 효율적으로 활용하는 것이 중요합니다.

알고리즘 문제 풀이

알고리즘에서 문자열 관련 문제를 풀이할 때 string을 직접 가지고 노는 것은 굉장히 부담이 되는 작업이다. 이를 해결하기 위해 stringbuilder를 활용하거나 string은 건들지 않고 다른 다양한 방식으로 문제를 해결해 나가보도록 생각하는 것도 중요한 것 같다.

profile
Dreams Come True

0개의 댓글