문자 (컴퓨팅)

컴퓨팅 및 전기 통신에서 문자(文字) 또는 캐릭터(character)는 자연어 문자(알파벳, 숫자 및 문장 부호 포함), 공백 문자(공백 또는 탭) 또는 제어 문자(문자 기반 데이터를 소비하는 컴퓨터 하드웨어를 제어함)의 인코딩된 표현이다. 문자의 시퀀스를 문자열이라고 한다.

일부 문자 인코딩 시스템은 고정된 수의 비트를 사용하여 각 문자를 표현하는 반면, 다른 시스템은 가변적인 크기를 사용한다. 여섯 비트 문자 코드, 5비트 보도 코드, 심지어 4비트 시스템(가능한 값이 16개뿐임)과 같이 현재는 구식이 된 시스템에서 다양한 고정 길이 크기가 사용되었다. 더 현대적인 ASCII 시스템은 각 문자에 8비트 바이트를 사용한다. 오늘날 유니코드 기반의 UTF-8 인코딩은 가변적인 수의 바이트 크기 코드 유닛을 사용하여 코드 포인트를 정의하며, 이들이 결합하여 하나의 문자를 인코딩한다.

 용어 

 문자 
일반적으로 문자는 정보를 나타내는 기호(글자나 숫자 등)이며, 컴퓨팅 문맥에서는 컴퓨터가 받아들일 수 있는 그러한 기호의 표현이다. 문자는 종종 ANSI나 유니코드와 같은 표준에 의해 정의된 정보의 인코딩을 의미한다.

 문자 집합 
문자 집합은 각각 고유한 숫자 값에 매핑된 문자 레퍼토리를 식별한다.

 자체 
자체(glyph)는 문자의 특정한 시각적 외형을 설명한다. 많은 컴퓨터 글꼴은 해당 문자의 수치 코드에 의해 색인화된 자체들로 구성된다.

유니코드의 등장과 광범위한 수용, 그리고 비트와 무관한 부호화된 문자 집합의 등장으로 문자는 점차 특정한 시각적 현상과 독립적인 정보의 단위로 간주되고 있다. ISO/IEC 10646 (유니코드) 국제 표준은 문자 또는 추상 문자를 "데이터의 구성, 제어 또는 표현에 사용되는 요소 집합의 구성원"으로 정의한다. 유니코드의 정의는 독자가 문자, 그래핌(grapheme), 자체 등을 구별하도록 권장하는 설명 주석으로 이를 보완한다. 이러한 구별은 표현과 내용의 분리라는 더 넓은 주제의 사례이다.

예를 들어, 히브리 문자 알레프("א")는 수학자들이 특정 종류의 무한(ℵ)을 나타내기 위해 자주 사용하지만, 일반적인 히브리어 텍스트에서도 사용된다. 유니코드에서 이 두 용도는 서로 다른 문자로 간주되며, 비록 동일하게 렌더링될 수 있지만 두 개의 서로 다른 유니코드 숫자 식별자("코드 포인트")를 갖는다. 반대로, 물을 뜻하는 한자 "水"는 중국어 텍스트에서보다 일본어 텍스트에서 약간 다른 외형을 가질 수 있으며, 지역 글꼴이 이를 반영할 수 있다. 그럼에도 불구하고 유니코드에서 이들은 동일한 문자로 간주되며 동일한 코드 포인트를 공유한다.

유니코드 표준은 이러한 추상 문자와, 컴퓨터에서의 표현을 용이하게 하기 위해 숫자 코드와 쌍을 이룬 부호화된 문자(coded characters 또는 encoded characters)를 구별한다.

 조합 문자 
조합 문자는 유니코드에서 다루어지며, 유니코드는 다음 각각에 코드 포인트를 할당한다.

 'i'(U+0069),
 조합용 트레마(U+0308),
 'ï'(U+00EF).

이를 통해 'naïve'라는 단어의 중간 문자를 단일 문자 'ï'로 코딩하거나, 문자 와 조합용 트레마의 조합(U+0069 LATIN SMALL LETTER I + U+0308 COMBINING DIAERESIS)으로 코딩할 수 있다. 이는 로도 렌더링된다.

 char 

C에서 (character의 약자)는 크기가 1바이트인 자료형이지만, 관습적인 바이트 크기인 8비트와 달리 여기서의 바이트 사용은 덜 구체적이다. 바이트는 "기본 실행 문자 집합"의 모든 구성원을 포함할 수 있을 만큼 충분히 커야 한다고 정의된다. 컴파일러가 사용하는 비트 수는  매크로를 통해 접근할 수 있다. 현재까지 가장 일반적인 크기는 8비트이며, POSIX는 8비트일 것을 요구한다. 현대 C 표준에서 는 UTF-8 코드 포인트를 보유하는 데 필요하며, 이는 최소 8비트의 크기를 요구한다.

유니코드 코드 포인트는 최대 21비트를 필요로 할 수 있으므로,  유형은 일반적으로 모든 문자를 담기에 충분히 크지 않다. 그럼에도 불구하고  유형은 각 코드 포인트가 1~4바이트를 필요로 하는 UTF-8 인코딩에 매우 적합하다.

역사적으로 문자가 단일 바이트에 저장되었다는 사실로 인해 "char"와 "character"라는 용어가 혼용되어 사용되었으며, 이는 오늘날 UTF-8과 같은 다중 바이트 인코딩이 사용될 때 혼란을 야기한다. 현대 POSIX 문서는 "문자"(character)를 단일 그래픽 기호 또는 제어 코드를 나타내는 하나 이상의 바이트 시퀀스로 정의하고, char 데이터를 참조할 때는 "바이트"(byte)를 사용하여 이를 해결하려 한다. 그러나 여전히  배열을 (바이트 배열이 아닌) 문자 배열로 정의하는 것과 같은 오류가 남아 있다.

유니코드는 확장 문자라고 불리는, 보다 큰 코드 유닛의 문자열에 저장될 수 있다. 원래의 C 유형은 wchar_t라고 불렸다. 일부 플랫폼은 를 16비트로 정의하고 다른 플랫폼은 32비트로 정의하기 때문에, 현재 버전에서는 명확한 와 를 제공한다. 이때에도 저장되는 객체가 반드시 문자가 아닐 수도 있는데, 예를 들어 가변 길이 UTF-16은 종종  배열에 저장된다.

다른 언어들에도  유형이 있다. C++을 포함한 많은 언어는 C와 같이 8비트 바이트를 사용한다. 자바와 같은 다른 언어들은 UTF-16을 더 직접적으로 수용하기 위해 2바이트의 넓은 저장 공간을 사용한다.

 같이 보기 
 문자열

 각주 

 외부 링크 
  Characters: A Brief Introduction by The Linux Information Project (LINFO)
  ISO/IEC TR 15285:1998 summarizes the ISO/IEC's character model, focusing on terminology definitions and differentiating between characters and glyphs

분류:문자 인코딩
분류:자료형
분류:디지털 타이포그래피
분류:원시 자료형