문자열

컴퓨터 언어에서 문자열(string)은 문자(character)들의 연결을 말한다. 지금 보이고 있는 이 문장도 문자열의 한 예이다. 이 페이지에서는 주로 C/C++에서 사용되고 있는 문자열에 대해 간략히 짚어본다.

문자열의 분류

C/C++언어에서 문자열을 분류할 수 있는 방법은 두 가지이다. 첫째는 한 문자를 저장하는 데 필요한 크기에 때라 분류하는 방법이고, 둘째는 문자 배열인가 문자열을 위한 전용 자료형인가로 분류하는 방법이다. 이 두가지 방법의 조합으로 주로 4가지 형태의 문자열 표현 방법이 존재한다.

자료형으로 분류

C언어에서는 문자열을 다루기 위한 전문 자료형을 제공하지 않았고, 객체 지향을 지원하지 않기 때문에 지원하는 것도 거의 불가능했다. 따라서 C언어에서는 문자열을 다루기 위해 문자의 배열을 이용하고 이를 다루기 위한 str???함수들을 제공하였다. 이 방법은 나쁜 방법은 아니지만 불편하고, 특히 배열 인덱스 초과나 포인터 사용 실수 인한 오류 가능성이 높다.

C++언어는 객체지향을 지원하므로 이를 이용한 다양한 문자열 자료형이 등장하였다. 이 방식은 오류 가능성이 적고 편하다. 가장 대표적인 것이 STL의 string과 MFC의 CString이다. 개인적으로 CString가 편하나 STL은 표준이다. MFC로 GUI를 만드는 것이 아니라면 string을 추천한다. 닷넷(.NET)의 String도 있으나 C++환경에서 사용하기에 어색한 느낌이 강하다.

문자의 크기로 분류

문자의 크기로 분류하는 방법 중 가장 널리 사용되는 것은 MBCS(Multi Byte Character String)과 Unicode이다. MBCS는 영숫자는 1바이트, 그 외의 문자는 여러 바이트(보통 2바이트)로 표시하고, Unicode는 모든 문자를 같은 크기의 바이트(보통 2바이트)로 표시한다. 인터넷에서는 UTF-8이 표준으로 사용되고 있으나 컴퓨터 언어에서는 사용되지 않는다.

MBCS는 가장 널리 사용되던 방식이다. C/C++언어에서 MBCS문자열은 “~~“로 표현한다. stl의 string이 MBCS 방식을 사용한다. 윈도우 98까지도 아마 내부적으로 이 방식이 쓰인 것 같다. 또한 컴퓨터 언어 입문에서 널리 사용된 Visual C++ 6.0에서는 별도의 설정을 하지 않은 경우 이 방식을 사용하고, Unicode 관련 라이브러리는 아예 설치되지도 않았다. 환경이 이렇다보니 별 생각없이 MBCS로 문자열을 다뤘지만 이 방법은 문제가 많다. 조합형 한글 중 일부 깨지는 문자(똠)가 생기는 것은 물론 한 문자를 제대로 다룰 수도 없다. “한글”. 따옴표 안에 몇 글자가 있는가? strlen(“한글”); string(“한글”).length(); 그렇다면 이것들은 몇을 반환할까? 2글자이지만 4를 반환한다. 유일한 장점이라면 일반적인 환경에서 Unicode보다 문자열 저장에 필요한 공간을 덜 차지한다는 것이다.

Unicode는 최근에 널리 사용되고 있는 방식이다. 모든 글자를 동일한 크기의 바이트로 표현한다. 주로 2바이트이지만 3바이트 4바이트라도 유니코드이다. C/C++언어에서 유니코드 문자열은 L”~~“로 표현하여야 한다. 자바, C# 등은 Unicode만을 사용해서 간편하고 그냥 ”~~“으로 표현한다. stl의 wstring은 이 방식을 사용한다. Visual Studio 2005에서는 기본 설정이 유니코드로 되어있다. NT 커널이 사용된 운영체제(대중적으로는 윈도우 2000, 윈도우 XP)에서는 내부적으로 유니코드를 사용하고 있는 것 같다. 조합형 한글을 문제없이 표현할 수 있고, 한글자를 다루는데도 전혀 문제가 없다. 특별한 이유가 없는 한 유니코드를 사용하자.

C/C++에서는 이 두 가지 방법을 매크로를 이용하여 사용하는 경우가 많다. 코딩을 할 때 char, wchar_t를 이용하는 것이 아니라 TCHAR을 이용하고 _MBCS, _UNICODE 둘 중 정의된 매크로에 따라 자동으로 적절한 자료형이 선택된다. stl의 string, wstring는 이것을 지원하지 않으나 다음과 같은 코드를 헤더에 추가하고 tstring을 이용할 수 있다.

#ifdef _UNICODE
	#define tstring wstring
#else
	#define tstring string
#endif

비교

MBCS Unicode 매크로
문자 char wchar_t TCHAR
문자열 함수 이름 str??? wcs??? _tcs???
문자열 string wstring (tstring)

~~LINKBACK~~

토론

댓글을 입력하세요. 위키 문법이 허용됩니다:
K Z A T P
 
문자열.txt · 마지막으로 수정됨: 2010/02/26 04:24 저자 raychani
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0