알쿠미 2016. 5. 28. 16:49

1. 문자열의 문제점

문자열을 비교하는 함수 strcmp(), 문자열을 복사하는 함수 strcpy() 모드 O(n)의 동작이다.

ⓐ 문자열 클래스

- 문자열 객체를 넘길 때는 값이 아닌 참조로 넘길 것

- 일찍 코드를 프로파일링하고 자주해서 문자열 클래스가 프레임 저하의 주원인이 되지 않게 살필 것

ⓑ 고유 식별자

- 식별자에 문자을 쓰는 것은 자연스러운 일이지만 strcmp()를 사용하는 것은 너무 느리다.

- 그래서 해시 문자열ID를 사용한다.

- 문자열을 정수 처럼 비교하기 때문에 빠르다.

- 해시 테이블에 저장하면 해시 코드를 통해 언제든 문자열을 가져올 수 있다.


* 대부분의 게임 엔진들을 런타임에 해시 값을 계산하지 않는다. ( 해시 함수를 통가하는 속도는 느리기 때문)

* 그렇기 때문에 문자열을 해싱하는 것을 인턴이라고 하는데 인턴을 미리 해두고 저장해서 해시함수를 통과하지 않고 사용하는 것이 좋다.

    

2. 현지화

ⓐ 유니코드

- 영어와 다른 문자를 사용하기 위한 문자 셋 시스템

ⓑ UTF-8

- 각 문자 코드는 8비트지만 어떤 문자들은 1바이트 보다 큰 공간을 차지하기도 한다. ( 멀티 바이트 셋 MBCS)

- 장점은 ANSI 인코딩과 호환이 된다. 멀티바이트의 문자의 첫 바이트는 항상 가장 높은 비트가 1이기 때문이다.

ⓒ UTF-16

- 표준은 더 간단하지만 좀 더 비싼 방법을 사용한다.

- 와이드 캐릭터 셋(WCS) 이라고 부르는데 16비트를 사용한다.


ⓓ 윈도우 환경에서 유니코드

- UTF-16 하나의 데이터 타임은 wchat_t 이고 UTF-8이나 ANSI 문자열을 나타내는 것은 char이다.

- 캐릭터 셋에 무관하게 짤 수 있는 방법은 TCHAR을 사용하는 것이다.

( typedef를 사용해서 ANSI 모드에선 char이 되고 UTF-16(WCS)으로 컴파일 할 때는 wchar_t가 된다.)

- 모든 윈도우 API에서 접미사나 접두사로 w, wcs, W 가 붙은 것들은 와이드 문자를 의미한다.

- t, tcs, T 가 붙은 것들은 현재 사용하는 문자 타입을 의미한다.

ex) std::string은 STL의 ANSI문자열 클래스이고, std::wstring은 와이드 캐릭터 클래스다.

- 윈도우에서 WCS, MBCS 문자열 다루는 함수는 버전이 따로 존재한다.


ⓓ 콘솔에서의 유니코드

- 프로젝트에서 어떤 인코딩을 사용할지 가능한 한 빨리 정한 다음, 그 후 일관되게 사용하기만 한다면 실제로 어떤 것을 사용하는지는 별로 중요하지 않다.