일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Windows
- 백준
- 리뷰
- Tips강좌
- doit코틀린프로그래밍
- 지식나눔강좌
- Kotlin
- VS ERROR
- Javascript
- c#
- Programming
- 김성엽
- 프로그래밍
- tipssoft
- Visual Studio
- Direct2D
- c
- CS
- c++
- 연산자
- Tips프로그래밍강좌
- 이지스퍼블리싱
- Desktop
- 알고리즘
- 배열
- Win32
- 함수
- 포인터
- 티스토리
- 문법
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
C# - 문자열 본문
C#에서 사용하는 두 가지 방식의 문자열 처리
string
컴파일 진행시 string 자료형을 .net 자료형인 System.String 타입으로 전환해 컴파일을 진행한다. 때문에 string으로 작성하더라도 System.String에 선언된 모든 내부 프로퍼티 및 메서드를 사용할 수 있다.
관리 방식
string 자료형은 객체를 변수가 가리키는 방식으로 문자열을 처리하고, 새로운 문자열을 대입했을 때는 객체를 수정하지 않고 새로운 객체를 만들어 해당 객체를 변수가 가리키는 방식으로 처리한다. 즉, C/C++에서의 const char* 타입의 문자열 상수를 가리키는 방식이라 보면 될 것 같다.
개별 문자 접근
이렇게 작성된 문자열은 문자의 집합체로서, 문자열의 개별 문자에 접근할 때는 배열 연산자로 사용되었던 대괄호를 이용해 인덱스로 접근이 가능하다. 물론 늘 그렇듯이 제로 베이스.
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
'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 |