문자열은 항상 골치다. 하지만 잘쓰면 문자란 일반적인 C++언더보다 현실세계에 근접하므로 직관적인 표현이 가능하다.
string s = ""; <-문자열 형임을 나타내는 부호
방식으로 초기화가 가능하며 문자열(string)은 프로그램에서 가장 많이 쓰이는 데이타 타입중이 하나이다. C#의 키워드 string은 .NET의 System.String 클래스와 동일하며, String클래스의 모든 메서드, 프로퍼티를 사용한다. 예를 들어 일정 문자열 부분만 뽑아내는 .Substring()메서드, 문자열 길이를 구하는 .Length 프로퍼티 등등을 사용할 수 있다.
System.String 클래스의 인스턴스 메서드
Clone 클래스 참조 반환
CompareTo 특정 객체와 비교
CopyTo 객체 복사
EndsWith 특정 문자열로 끝나는지를 확인
Equals 비교 연산
GetEnumerator IEnumerator 인터페이스 반환
GetHashCode 해쉬 코드 반환
GetType 형식 정보 반환
GetTypeCode TypeCode 반환
IndexOf 문자열 검색
IndexOfAny 유니코드 문자열에서 먼저 나오는 문자 반환
Insert 문자열 삽입
LastIndexOf IndexOf를 뒤에서부터 수행
LastIndexOfAny IndexOfAny를 뒤에서부터 수행
PadLeft 문자열에서 남아있는 왼쪽을 빈 공백으로 채움
PadRight 문자열에서 남아있는 오른쪽을 빈 공백으로 채움
Remove 지정 개수의 문자 제거
Replace 문자열 치환
Split 문자열 분리하여 배열로 반환
StartsWith 특정 문자로 시작하는지를 확인
Substring 문자열 추출
ToCharArray 문자 배열로 변환
ToLower 소문자로 변환
ToString 객체를 나타내는 문자열 반환
ToUpper 대문자로 변환
Trim 양쪽 공백 없앰
TrimEnd 문자열 끝 부분의 공백 없앰
TrimStart 문자열 시작 부분의 공백 없앰
String은 변경이 불가능하다 ----------------------------------------------------------------------------------------------------------------------
C# 문자열은 Immutable 즉 한번 문자열이 설정되면, 다시 변경할 수 없다. 예를 들어, s="C#" 이라고 한 후 다시 s="F#"이라고 실행하면, .NET 시스템은 기존의 문자열 클래스에서 새로운 객체를 생성하여 "F#"이라는 데이타로 초기화 한 후 이를 변수명 s1에 할당한다. 즉, 내부적으로는 전혀 다른 메모리를 갖는 객체를 가리키는 것이다.
즉 빈번한 문자열의 변경은 실제로 우리가 생각하는 변경이 아니로 새로운 문자열 객체를 선언하고 할당하는 것과 같다. 큰 연산을 소비한다고 볼 수 있으니 자제해야 할듯 하다.
(나중에 보니 문자열 빌더를 통하는 방법이 있다고 한다 한번 봐둬야지.)
StringBuilder --------------------------------------------------------------------------------------------------------------------------------
StringBuilder 는 내부적으로 문자열의 추가삭제를 위해서 동착하는 작업들이 준비되어있는 클래스라고 보면 된다. string처럼 문자열을 곧바로 재할당하거나 하지 않고 내부적으로 가지고 있는 capacity값을 증가시켜 마치 vector자료구조처럼 동착하는 것으로 보인다.(내부적인 동작에 대해서는 명확하게 파악하지 못했다.)
할때마다 새로운 메모리를 할당하는 것과 달리. 충반한 메모리를 할당하고 거기에 덧붙이는 식으로 문자열을 추가하므로 일반적인 string대입보다 문자열 수정에 있어서는 빠르게 사용이 가능하다.
하지만 마치 변수처럼 사용하는 string 클래스보다는 클래스와 비슷하게 초기화등이 가능하기 때문에 사용법은 조금더 까다로와 보인다.
StringBuilder sb = new StringBuilder("abcdef"); -> 마치 클래스와 같은 초기화 방식이다.
'게임개발공부 > C#공부' 카테고리의 다른 글
배열과 배열메소드 (0) | 2013.12.19 |
---|---|
C#공부에 대해서... (0) | 2013.12.18 |
@의 의미가 대체 뭐지? C#에서 레퍼런스와 포인터란? 막긁어와! (0) | 2013.12.16 |
객체형???? (0) | 2013.12.16 |
C#의 리터럴 (0) | 2013.12.16 |