F.R.I.D.A.Y.

C# - 문자열 본문

DEV/.Net

C# - 문자열

F.R.I.D.A.Y. 2021. 5. 27. 13:39
반응형

C#에서 사용하는 두 가지 방식의 문자열 처리


string

 컴파일 진행시 string 자료형을 .net 자료형인 System.String 타입으로 전환해 컴파일을 진행한다. 때문에 string으로 작성하더라도 System.String에 선언된 모든 내부 프로퍼티 및 메서드를 사용할 수 있다.

 

관리 방식

 string 자료형은 객체를 변수가 가리키는 방식으로 문자열을 처리하고, 새로운 문자열을 대입했을 때는 객체를 수정하지 않고 새로운 객체를 만들어 해당 객체를 변수가 가리키는 방식으로 처리한다. 즉, C/C++에서의 const char* 타입의 문자열 상수를 가리키는 방식이라 보면 될 것 같다.

C/C++ 방식과 유사하다

 

 

개별 문자 접근

 이렇게 작성된 문자열은 문자의 집합체로서, 문자열의 개별 문자에 접근할 때는 배열 연산자로 사용되었던 대괄호를 이용해 인덱스로 접근이 가능하다. 물론 늘 그렇듯이 제로 베이스.

string s = "hello world"

s[0] // h
s[1] // e

 

배열 전환

 위 <개별 문자 접근>에서 본 것과 같이 문자열은 문자의 집합체이기 때문에 char[] 타입으로 변환이 가능하다. 그 역 또한 가능하며, 기본적으로 기능을 제공한다.

string s = "Hello world";
char[] cstr = s.ToCharArray();

 

char[] cstr = {'h', 'e', 'l', 'l', 'o'};
string s = new string(cstr);

 C/C++과의 차이라면 char[] 타입의 변수에는 문자열을 바로 넣을 수 없다.

char[] cstr = "Hello"; // error

 만일 이렇게 하려면 따로 작업을 해주어야 할 듯 하다. C++에선 operator= 연산자 오버로딩을 할 수 있었으니 C#에서도 가능할지도.

 

문자 값 연산

 문자는 ASCII와 같이 특정 숫자를 특정 문자로 1:1 매핑한 것이기 때문에 문자 값에 수를 더하거나 빼서 문자를 변경할 수 있다.

 

 

System.Text.StringBuilder

 string 타입은 한 번 값을 결정하면 그 값이 변경되지 않는 Immutable 타입이다. 이러한 방식은 값을 자주 수정해야하는 경우에 있어서는 부작용으로 다가올 수 있는데, 매번 수정을 거칠 때마다 새로운 객체를 생성하고 소멸시켜야 하기 때문에 속도면에서 불리할 수밖에 없다.[# C++의 스타일로 이해를 하고 있기 때문에 이 사안이 C#에도 적용될지는 더 알아봐야한다. 다만, 상식 수준에서 예측하면 이렇다는 것이다.] 때문에 문자열이 자주 변경되는 부분, 특히나 반복문 안에서는 System.Text.StringBuilder를 이용할 것을 권장한다.

 

 System.Text.StringBuilder는 string[# Syste.String] 타입과 달리 일정 메모리 영역을 직접 관리하면서 문자열을 수정하는 Mutable 타입이기 때문에 반복적인 문자열 변경 로직에서 효과적이다.

 특히나, C#을 이용해 웹 서비스 등과 같이 많은 사람들이 동시에 접근할 수 있는 시스템을 작성할 때는 반복적인 문자열 수정으로 인한 메모리 점유율 급증 문제에서 탈출하는 실마리가 될 수도 있다고.

 

# index

728x90
반응형

'DEV > .Net' 카테고리의 다른 글

C# - Nullable Type  (0) 2021.05.27
C# - enum(열거형)  (0) 2021.05.27
C# - 변수 선언  (0) 2021.05.27
.Net 프레임워크의 통합  (0) 2021.05.27
XdobeFixGUI v3.0  (1) 2019.08.12
Comments