String ---------------------------------------------------------------------------------------------------------------------------------------

문자열은 항상 골치다. 하지만 잘쓰면 문자란 일반적인 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
Posted by JJOREG