ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아스키(ASCII) / 유니코드(Unicode), 문자를 0과 1로 표현하는 방법
    코딩 배우기 2020. 9. 26. 19:48

    반갑습니다. 개발린이 devigner입니다.
    오늘은 문자를 0, 1로 표현하는 방법에 대해 알아보겠습니다.

    8비트(1바이트)로 몇 가지 약속을 할 수 있을까요? 이전, [코딩 배우기] - 코드(Code), 0과 1의 약속의 '예/아니요' 대화방 에서 사용했던 2비트부터 알아보겠습니다. 2비트의 경우 '예-예, 예-아니요, 아니요-예, 아니요-아니요'와 같이 4가지 약속을 정할 수 있습니다.
    3비트는 어떨까요? 2비트로 표현할 수 있는 4가지 모든 경우 앞에서 '예'로 시작하는 것 한 번, '아니요'로 시작하는 것 한 번을 각각 더하면 3비트 조합의 가짓수가 나옵니다. 즉, 아래 그림과 같이 8가지 경우가 완성됩니다.


    2비트 조합 '예' 추가
    2비트 조합 '아니요' 추가

    이를 통해 1비트가 늘어나면 약속이 가능한 조합의 가짓수는 2배씩 늘어난다는 것을 알 수 있습니다. 정리하자면, 8비트는 2를 8번 곱한 256가지를 약속할 수 있고, 16비트는 2를 16번 곱해서 나오는 숫자인 65,536가지의 약속을 할 수 있습니다. 8비트(1바이트)에 비해 16비트(2바이트)가 매우 많은 약속을 할 수 있다는 것을 확인할 수 있습니다.

    이제 컴퓨터에서 가장 많이 사용하는 두 가지 코드를 소개하겠습니다. 첫 번째는 8비트 단위로 약속을 정한 아스키ASCII이고, 다른 하나는 16비트 단위로 약속을 정한 유니코드Unicode입니다.

    알파벳을 위한 약속, 아스키

    우선 아스키는 미국표준협회(ANSIAmerican National Standards Institute)에서 만든 코드입니다. 아스키란 용어도 American Standard Code for Information Interchange정보 교환을 위한 미국 표준 약속의 약자입니다. 미국에서 만들었으니, 당연히 미국 사람들이 쓰는 글자인 영문자에 대한 약속입니다. 아스키에서는 영어 대문자, 영어 소문자, 숫자, 특수문자를 8비트 안에 약속했습니다. 아래 표는 아스키의 몇 가지 예시입니다.


    아스키(ASCII) 예시

    여기서 주목할 점은 대문자 A와 소문자 a가 서로 다른 코드로 표현되어 있습니다. '의미'는 같지만 대문자와 소문자는 엄연히 다른 문자이기 때문에 다른 코드로 약속된 것입니다.


    대소문자 구분 없는 사이트

    컴퓨터 언어는 기본적으로 대소문자를 무조건 구별합니다. 하지만 사람들은 보통 영어로 이야기할 때 대소문자를 크게 구분하지 않습니다. 이 때문에 어떤 개발자들은 문자가 입력되면 모두 소문자 또는 대문자로 변환되게 만들기도 합니다. 이렇게 하면 사용자는 마치 대소문자를 구분하지 않는 것처럼 느낍니다. 즉 사용자의 편의를 위한 눈속임 코딩입니다.


    대/소문자 구분하는 경우
    대/소문자 구분하지 않는 경우

    모든 언어를 위한 약속, 유니코드

    이제 생각의 범위를 조금 더 확장해 보겠습니다. 만약 우리가 컴퓨터에서 영문자만 사용한다면 아스키로 충분할 것입니다. 하지만 현실은 그렇지 않습니다. 컴퓨터를 사용하지 않는 나라를 찾아보기 힘들 정도로 컴퓨터 사용이 보편화되면서 영문자 외에 세계 여러 나라의 문자도 표기해야 할 상황이 되었습니다. 그래서 '유니코드'라는 새로운 약속을 만들어 약속 공간을 더 많이 늘렸습니다. 각 나라의 글자와 컴퓨터 비트 언어 간에 약속을 할 수 있도록 말입니다. 유니코드로 공간을 늘릴 때 10비트, 11비트와 같이 1비트씩 늘리지 않고 한 입 크기의 최소 단위인 8비트(1바이트)의 두배 크기로 늘려서 16비트(2바이트)를 기본 공간으로 정했습니다. 만든 방법은 간단합니다. 기존에 쓰던 아스키코드를 유니코드 안에 집어넣습니다. 먼저 영문자는 아스키코드의 8비트 앞에 8비트 공간을 추가하고, 추가된 공간에 0을 여덟 번 넣어서 만들었습니다. 아스키코드에 없던 새 언어에 대한 약속은 추가된 8비트 공간까지 사용해 만들었습니다.


    유니코드(Unicode) 예시

    이렇게 추가한 약속들 중 가장 많은 코드 수를 차지하는 언어는 한자입니다. 약 9만 개의 약속이 한자로 정의되어 있습니다. 우리 한글은 두 번째로 많은, 약 1만 개의 약속으로 정의되어 있습니다. 유니코드로 약속된 한글은 유니코드 사이트(https://unicode.org/charts/PDF/UAC00.pdf)에서 확인할 수 있습니다.


    유니코드(Unicode) 한글 문자표

    UTF-16도 유니코드인가?

    유니코드의 정확한 명칭은 UTFUnicode Transformation Format, 유니코드 변환 양식입니다. 유니코드에는 다양한 버전이 있는데, 16비트를 하나의 문자 기준으로 하는 UTF-16이 대표적입니다. 그 외에 32비트 공간으로 확장한 UTF-32도 있습니다. UTF-32는 언어 외에 이모지Emoji와 같은 특수기호도 포함된 약속입니다.


    지금까지 문자를 0, 1로 표현하는 방법으로 아스키(ASCII)와 유니코드(Unicode)에 대해서 알아보았습니다.
    부족한 글이지만 끝까지 읽어주셔서 감사합니다.


    참고문헌

    Do It! 첫코딩, 정동균, 이지퍼블리싱, 2019.11.20

    댓글

Designed by Tistory.