안녕하세요 삽잡이입니다.
이번시간에는 문자 코드에 대해서 알아보려고 합니다.
옛날부터 문자(문자열, 문자 코드)에 대한 많은 코드들이 존재했습니다.
모든 컴퓨터는 0과 1의 바이너리 코드를 사용할 수 있는데,
따라서 사진, 동영상들은 모두 숫자로 표현되어야 합니다. 이러한 표현을 위해 문자코드가 필요한 것입니다.
A라는 문자를 어떤 숫자와 매핑 시킬 것이냐, 즉, 정의할것이냐를 문자코드라고 할 수 있는데요,
여기에서 컴퓨터 용어로 사용되는 코드란, '해석해야하는', '해석되어져야하는'으로 통합니다.
어찌됬건, 문자 코드는 여러가지가 있었는데, 지금은 하나로 통합니다.
전 세계적으로 표준화 된 문자코드의 집합,
전 세계적으로 정의된 Uniqe한 문자 정의 코드...
우리는 이를 '유니코드'라고 부릅니다. (자세한 내용은 unicode.org를 참조하세요.)
정리하자면, 유니코드란 전 세계에 존재하는 모든 문자에 대해서 약속된 정의 코드라고 할 수 있습니다.
주그 유니코드는 전 세계적인 문자 코드를 정의한 것에 지나지 않습니다.
여담으로, C#, java, python 같이 비교적 최근에 나온 언어들의 경우
모드 문자코드는 '유니코드'만을 지원합니다.
한글 같은 경우 대부분의 문자가 2byte면 표현이 가능합니다. 즉, 0xFFFF 내에 들어온다는 것입니다.
그런데, 2byte를 가지고는 전 세계의 모든 문자를 표현할 수 없습니다.
따라서, 유니코드에는 16진수로 문자를 정의합니다.
예를 들어 0x1, 0x2, 0x12ff, 0x12ff7c, 0x43114377 이렇게 말입니다...
전세계적인 문자는 4바이트를 넘지 않습니다.
즉, 유니코드로 정의되어 있는 최대 값이 정수로 표현되는 4바이트가 넘지 않는 다는 것입니다.
그런데 위의 예시로 든 16진수로 정의된 문자들을 다시 한번 보겠습니다.
크기가 비교적 짧은 0x1, 0x2, 0x12ff 와 같은 문자들은 매우 자주 사용하지만,
0x12ff7c, 0x43114377 와 같이 길이가 킨 문자들은 가끔 사용한다고 가정해보겠습니다.
짧은 길이의 문자들을 자주 사용하는데, 즉, 1바이트로 표현이 충분한데
모두 4바이트로 표현하면 메모리 낭비가 되지 않겠습니까...
그래서 짧은 놈들의 최상위 비트를 0으로,
긴 놈들의 최상위 비트를 1로 세팅하여서 구분을 하게 됬습니다.
그렇게 되어서 최상위 비트가 0이면 1바이트 짜리라는 것으로 표현하게 된것입니다.
또한, 최상위 비트가 1이라면 나머지 3비트에 나라코드를 쓰고,
다음으로 실제 문자를 표현하자... 이런식으로 약속을 하게 된것입니다.
정리하자면, 유니코드에서는 인코딩이라는 것을 통해 이러한 문제를 해결하게 된 것이지요...
위에서 말한 방식은 인코딩 방식 중에 UTF-8방식을 말한 것이었습니다.
영어 문화권을 위해 만들어진 인코딩 방식으로써,
모든 영어 문화권의 문자들은 1바이트이기 때문에
8비트 즉, 1바이트로 문자들을 표준으로 표현하고
표현 못하는 것은 1바이트가 아닌 4바이트로 표현하자... 이런식으로 약속을 한것입니다.
이러한 방식으로 표준을 1바이트로 할지 2바이트로 할지 등등에 의해서
UTF-8, UTF-16, UTF-32 와 같은 인코딩 형식이 만들어진것입니다.
음... 이와 같은 방식은 압축을 생각해보면 편한데,
많이 쓰는 값들을 작은 값으로 정의하고, 자주 안쓰는 값들을 큰 값으로 정의하면
원본 데이터를 줄여서 쓸 수 있는 것과 비슷한 방식이라고 생각해보시길 바랍니다...
많이 쓰는 문자를 큰 바이트로 쓰면 손해이기 때문에, 인코딩 방식이 만들어진것입니다.
'삽질의 현장 > - ETC' 카테고리의 다른 글
[삽잡이]WinSock2 헤더 사용시 주의사항 (0) | 2015.10.05 |
---|---|
[삽잡이] 유니코드와 멀티바이트코드 (0) | 2015.09.25 |
[삽잡이] 0, NULL, \0? (0) | 2015.09.18 |
[삽잡이] 개발 잘하는 방법 (코딩 잘하는 방법) (2) (0) | 2015.07.25 |
[삽잡이] 개발 잘하는 방법 (코딩 잘하는 방법) (1) (0) | 2015.07.24 |