포스트

C#의 String과 StringBuilder

C#에서 stringStringBuilder는 문자열을 처리하기 위한 두 가지 주요 클래스입니다.

string 클래스는 불변(immutable) 객체이고, StringBuilder 클래스는 가변(mutable) 객체입니다.

string 클래스

string 객체는 한 번 만들면 변경할 수 없습니다. 이것을 불변(immutable) 객체라고 합니다.

따라서, 문자열 연산(예: 연결, 삽입, 삭제 등)을 수행할 때마다 새로운 string 객체를 만들어 변수명에 할당해 주는 것으로 동작합니다.

문자열이 빈번하게 변경되는 경우에는 객체가 많이 만들어지고, 그만큼 실행 속도메모리 사용이 많아집니다.

이런 특성으로 인해 string은 다음과 같은 상황에서 유용합니다.

  • 단순 문자열 조작: 짧은 문자열을 자주 변경하지 않고 사용하는 경우.
  • 안전성: 불변성이 보장되므로 스레드 안정성(thread safety)이 필요할 때.
사용 예제
1
2
3
string str1 = "Hello";
string str2 = str1 + " World";  // 새로운 문자열 객체 생성
Console.WriteLine(str2);        // "Hello World" 출력

StringBuilder 클래스

StringBuilder 클래스는 가변(mutable) 객체입니다. 이는 한 번 생성된 후에도 그 내용이 변경될 수 있음을 의미합니다.

StringBuilder는 내부적으로 동적 배열을 사용하여 문자열을 저장하고, 필요에 따라 크기를 조절합니다.

따라서, 문자열을 반복적으로 수정해야 하는 경우 StringBuilder를 사용하는 것이 더 효율적입니다.

주요 특징
  • 성능: 문자열 조작(특히 반복적인 연결, 삽입, 삭제 등) 시 성능이 뛰어납니다.
  • 메모리 효율성: 문자열 변경 시 새로운 객체를 생성하지 않으므로 메모리 사용이 효율적입니다.
사용 예제
1
2
3
StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World");
Console.WriteLine(sb.ToString());  // "Hello World" 출력

주로 사용하는 메서드 표

다음은 string 클래스와 StringBuilder 클래스의 자주 사용하는 메서드를 포함한 표입니다. 메서드가 많아 표를 나누어 정리하였습니다.

string 메서드

메서드설명
Contains(string value)지정한 문자열이 포함되어 있는지 여부를 확인합니다.
StartsWith(string value)지정한 문자열로 시작하는지 여부를 확인합니다.
EndsWith(string value)지정한 문자열로 끝나는지 여부를 확인합니다.
IndexOf(string value)지정한 문자열이 처음으로 나타나는 인덱스를 반환합니다.
LastIndexOf(string value)지정한 문자열이 마지막으로 나타나는 인덱스를 반환합니다.
Substring(int startIndex)지정한 인덱스에서 시작하는 부분 문자열을 반환합니다.
Replace(string oldValue, string newValue)문자열 내의 지정한 부분 문자열을 다른 문자열로 대체합니다.
ToLower()문자열을 소문자로 변환합니다.
ToUpper()문자열을 대문자로 변환합니다.
Trim()문자열의 시작과 끝에서 모든 공백 문자를 제거합니다.
TrimStart()문자열의 시작에서 모든 공백 문자를 제거합니다.
TrimEnd()문자열의 끝에서 모든 공백 문자를 제거합니다.
Split(char[] separator)지정한 구분 문자를 사용하여 문자열을 부분 문자열 배열로 나눕니다.
Join(string separator, string[] value)지정한 구분 문자를 사용하여 문자열 배열의 요소를 하나의 문자열로 결합합니다.
Equals(object value)두 문자열이 동일한지 비교합니다.
PadLeft(int totalWidth)지정된 총 너비를 가지도록 문자열의 왼쪽을 패딩합니다.
PadRight(int totalWidth)지정된 총 너비를 가지도록 문자열의 오른쪽을 패딩합니다.
Compare(string strA, string strB)두 문자열을 비교하여 정수 값을 반환합니다.
Concat(params string[] values)여러 문자열을 하나의 문자열로 결합합니다.
Copy(string str)문자열의 새로운 인스턴스를 생성합니다.
CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)문자열의 지정된 범위를 다른 문자 배열로 복사합니다.
Insert(int startIndex, string value)지정한 인덱스 위치에 문자열을 삽입합니다.
Format(string format, params object[] args)지정한 형식에 맞춰 문자열을 구성합니다.

StringBuilder 메서드

메서드설명
Append(string value)문자열을 현재 StringBuilder 객체의 끝에 추가합니다.
AppendLine()현재 StringBuilder 객체의 끝에 새 줄을 추가합니다.
AppendFormat(string format, object arg0)지정한 형식에 맞춰 문자열을 추가합니다.
Insert(int index, string value)지정한 인덱스 위치에 문자열을 삽입합니다.
Remove(int startIndex, int length)지정한 범위 내의 문자를 제거합니다.
Replace(string oldValue, string newValue)문자열의 지정한 부분 문자열을 다른 문자열로 대체합니다.
Clear()현재 StringBuilder 객체의 모든 내용을 제거합니다.
ToString()StringBuilder 객체의 내용을 문자열로 변환합니다.
LengthStringBuilder 객체의 길이를 가져오거나 설정합니다.
Capacity내부적으로 할당된 메모리의 크기를 가져오거나 설정합니다.
EnsureCapacity(int capacity)StringBuilder가 최소한 지정된 용량을 가지도록 합니다.

차이점 요약

특성stringStringBuilder
가변성불변 (Immutable)가변 (Mutable)
성능문자열 변경 시 비용이 큼반복적인 변경 시 성능 우수
사용 용도변경이 적고 짧은 문자열반복적인 변경이 많은 경우
스레드 안정성스레드 안전스레드 안전하지 않음
메모리 사용자주 변경 시 비효율적메모리 사용 효율적
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.