본문 바로가기
잡식

유니코드(Unicode)와 UTF의 관계

by 불멸도도 2024. 8. 6.

개요

유니코드(Unicode)는 전 세계 모든 언어를 통일된 방식으로 표현하기 위해 제안된 국제적인 코드 규약입니다. 이 규약은 미국 애플 컴퓨터, 마이크로소프트, IBM, 썬 마이크로시스템즈, 노벨 등 운영 체제를 다루는 미국 기업들이 중심이 되어 설립한 유니코드 컨소시엄에 의해 제창되었습니다. 1993년에는 ISO의 표준(ISO/IEC 10646)으로 채택되었습니다.

유럽 문자권에서는 알파벳과 특수 문자 몇 가지를 한 바이트로 충분히 표현할 수 있었기 때문에, 대부분의 정보가 한 바이트의 낱말로 표현되었습니다. 그러나 한글, 한자, 일본 가나 등의 글자는 영어와 구조가 달라 하나의 바이트로 표현이 불가능해 두 바이트를 조합해 하나의 글자를 표현해야 합니다. 이러한 문제를 해결하고 세계 각국의 글자에 대응하기 위해 유니코드가 등장했습니다. 유니코드는 본질적으로 16비트를 사용하여 하나의 글자를 표현합니다.

유니코드는 일부 예외를 제외한 모든 글자를 두 바이트로 취급하기 때문에 이 코드를 사용하면 로마글 프로그램을 한글, 일어, 중국어 등의 두 바이트 글자로 변환하는 데 드는 비용과 노력을 절감할 수 있습니다. 하지만 데이터의 용량이 증가하므로, 주로 문서 교환이나 통신 등의 분야에서 사용됩니다. 유니코드 2.0에서는 현대의 표현 가능한 모든 한글 11,172자의 코드 값이 0xAC00-0xD7A3이고, 한글 자모 글자 240개(옛 한글 자소 포함)의 코드 값이 0x1100-0x11F9입니다. 자모 글자 코드로 풀어쓰기를 하면 옛 한글의 표현도 가능하고, 채움(fill) 글자를 이용하여 일부 자모가 빈 글자의 표현도 가능합니다.

반응형

유니코드와 UTF(Unicode Transformation Format)의 관계

유니코드를 이해하기 어렵게 하는 것은 실제 저장소나 물리적 바이트 측면에서 동일한 코드 포인트(유니코드 문자의 숫자 값)를 표시할 수 있는 여러 가지 방법이 있다는 것입니다. 모든 유니코드 코드 포인트를 통일되게 표현할 수 있는 유일한 방법이 각 코드 포인트에 대해 4 바이트를 사용하는 방법뿐이라면, 대부분의 개발자는 유니코드가 메모리와 처리 측면에서 너무 많은 대가를 요구한다고 생각할 것입니다.

유명한 "UTF"라는 용어는 Unicode Transformation Format의 약어입니다. 이는 유니코드 표준의 일부인 알고리즘 매핑으로, 각 코드 포인트(문자의 절대적인 숫자 표현)를 지정된 문자를 표현하는 바이트의 고유 시퀀스로 매핑합니다. 매핑은 양 방향으로 사용되어, 다른 표현으로 상호 전환할 수 있습니다.

표준은 처음 128개의 문자를 표현하는 데 몇 바이트를 사용하느냐에 따라, 세 가지 인코딩 또는 형식(8, 16 또는 32)을 정의합니다. 인코딩의 세 가지 형식 모두 각 코드 포인트에 대해 최대 4 바이트의 데이터를 필요로 한다는 것은 흥미로운 사실입니다.

반응형

UTF-8

UTF-8은 문자를 1~4 바이트의 가변 길이 인코딩으로 변환합니다. UTF-8은 HTML 등의 프로토콜에서 자주 사용되는데, 이는 대부분의 문자가 ASCII 집합에 포함될 경우(예: HTML의 마커) 매우 컴팩트하기 때문입니다.

UTF-16

UTF-16은 대부분의 운영 체제(Windows 포함)나 Java, .NET과 같은 환경에서 자주 사용됩니다. 대부분의 문자가 2 바이트에 맞추어지므로 사용이 편리하며 간결하고 처리 속도가 빠릅니다.

UTF-32

UTF-32는 처리 작업에 가장 유리하지만, 메모리를 많이 사용하며 실제 사용 빈도는 낮습니다. 모든 코드 포인트가 동일한 길이를 가지므로 처리에 유리하지만 메모리 효율이 떨어집니다.

반응형

멀티바이트 표현의 문제

멀티바이트 표현(UTF-16 및 UTF-32)과 관련된 또 다른 문제는 바이트 중 어떤 부분이 먼저 오느냐 하는 것입니다. 표준에서는 모든 형태가 허용되므로, UTF-16 BE(big-endian) 또는 LE(little-endian)를 사용할 수 있으며 UTF-32에도 마찬가지입니다.

유니코드의 장점과 단점

장점

  1. 범용성: 유니코드는 전 세계의 모든 문자를 하나의 코드 체계로 통합합니다. 이를 통해 국제화된 소프트웨어 개발이 용이해집니다.
  2. 표준화: 모든 문자에 고유한 코드 포인트를 부여함으로써, 문자 데이터의 일관성을 유지할 수 있습니다.
  3. 다양성 지원: 다양한 언어와 문자를 지원하므로 다국어 지원이 필요한 환경에서 매우 유용합니다.
반응형

단점

  1. 메모리 사용량 증가: 유니코드는 기본적으로 16비트를 사용하기 때문에, 기존의 8비트 문자 체계에 비해 메모리 사용량이 증가합니다.
  2. 복잡성 증가: 유니코드를 다루기 위해서는 추가적인 복잡성을 감수해야 하며, 이는 개발 비용과 시간이 증가하는 요인으로 작용할 수 있습니다.

유니코드와 다른 인코딩 방식의 비교

유니코드는 다양한 인코딩 방식과 비교했을 때, 명확한 장점과 단점을 가지고 있습니다. 다음은 유니코드와 대표적인 인코딩 방식의 비교입니다.

ASCII와의 비교

ASCII는 7비트 또는 8비트 인코딩 방식으로, 기본적으로 영어와 일부 특수 문자만을 지원합니다. 이에 비해 유니코드는 전 세계의 모든 문자를 지원하며, 확장성이 뛰어납니다. 그러나 메모리 사용량 측면에서는 ASCII가 더 효율적입니다.

반응형

ISO 8859와의 비교

ISO 8859는 유럽의 여러 언어를 지원하기 위해 설계된 8비트 문자 집합입니다. 그러나 유니코드는 이보다 더 많은 언어와 문자를 지원하며, 호환성 측면에서도 더 우수합니다. 다만, ISO 8859가 메모리 사용 면에서는 더 경제적입니다.

 

EUC-KR과의 비교

EUC-KR은 한글을 표현하기 위한 인코딩 방식으로, 한글 문자만을 효율적으로 지원합니다. 반면 유니코드는 한글을 포함한 전 세계 모든 문자를 지원하므로 국제화된 환경에서는 유니코드가 더 적합합니다. 그러나 한글만 사용하는 경우에는 EUC-KR이 더 적은 메모리를 사용합니다.

반응형

결론

유니코드는 전 세계 모든 언어를 통일된 방법으로 표현할 수 있는 강력한 도구입니다. 다양한 인코딩 방식과의 비교를 통해 유니코드의 장단점을 명확히 이해하고, 적절한 상황에서 이를 활용하는 것이 중요합니다. 앞으로도 유니코드는 계속해서 발전하며, 글로벌 환경에서의 중요성을 더욱 강조할 것입니다.

반응형