C# string

김현승·2024년 4월 27일
0

C#

목록 보기
6/13

C#에서 string 타입은 문자열을 표현하는 데 사용되며, .NET 프레임워크의 System.String 클래스를 기반으로 합니다. 문자열은 일련의 유니코드 문자로 구성됩니다.

문자열의 특징

  1. 불변성 (Immutability):
    • C#의 string 객체는 생성 후 수정할 수 없습니다. 이것은 문자열이 불변(immutable)이라는 것을 의미합니다. 문자열을 수정하는 것처럼 보이는 모든 연산은 실제로 새로운 문자열 객체를 생성하고 그 결과를 반환합니다.
  2. 메모리 할당:
    • 문자열이 생성될 때, 필요한 메모리는 동적으로 할당됩니다. 문자열의 불변성 때문에, 연결(concatenation), 수정, 부분 문자열(substring) 추출 등의 연산은 추가 메모리를 사용하고 새 문자열 객체를 생성할 수 있습니다.
  3. 인턴풀 (Intern Pool):
    • .NET은 효율성을 높이기 위해 문자열 인턴 풀을 사용합니다. 컴파일 타임에 알려진 문자열 리터럴은 자동으로 풀에 추가되어, 같은 문자열 리터럴은 프로그램 전체에서 동일한 메모리 위치를 참조합니다. 이 기능은 String.Intern 메서드를 통해 프로그래밍적으로도 사용할 수 있습니다.

주요 메서드 및 사용 예

string 클래스는 다양한 메서드를 제공하여 문자열 처리를 용이하게 합니다. 여기에는 문자열 검색, 비교, 분할, 대체 등의 기능이 포함됩니다.

  • 문자열 비교:
string a = "hello";
string b = "world";
bool areEqual = a.Equals(b);  // false
  • 문자열 연결:
string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;  // John Doe
  • 부분 문자열:
string example = "Hello world";
string sub = example.Substring(0, 5);  // Hello
  • 문자열 포맷팅:
string name = "John";
int age = 30;
string result = String.Format("{0} is {1} years old.", name, age);  // John is 30 years old.

성능 고려 사항

  • 불변성 때문에 문자열을 자주 변경하는 코드는 성능 저하를 일으킬 수 있습니다. 이런 경우 StringBuilder 클래스를 사용하는 것이 좋습니다. StringBuilder는 변경 가능한 문자열을 지원하여 반복적인 수정이 필요할 때 메모리 사용을 최적화합니다.
  • 문자열 연산을 많이 수행하는 애플리케이션에서는 메모리 사용과 성능에 주의해야 합니다. 문자열 인턴풀이나 StringBuilder를 적절히 활용하면 메모리 할당과 가비지 컬렉션 부하를 줄일 수 있습니다.

StringBuilder의 동작

StringBuilder는 기본적으로 16문자를 담을 수 있는 자리를 잡습니다. 이렇게 할당 된 크기 내에서는 어떠한 수정을 해도 가비지가 생성되지 않습니다.
만일 미리 할당한 버퍼가 다 찬 상태에서 append를 하게 되면 새 버퍼를 할당한 뒤 버퍼간 링크를 구성합니다.

0개의 댓글