본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(41) - 문자셋과 유니코드

by 머니테크리더 2023. 5. 4.
반응형

문자셋과 유니코드 대표 이미지
문자셋과 유니코드 대표 이미지

🔖 INDEX

     

     

    문자셋(Character Set)과 유니코드(Unicode)는 모두 컴퓨터에서 문자를 표현하고 처리하기 위한 체계입니다. 그리고, 자바에서 문자 데이터를 다루는 데 있어서 인코딩(Encoding)은 매우 중요한 개념입니다. 이 글에서는 문자셋과 유니코드, 인코딩을 이해하고 활용하는 방법에 대해서 알아보겠습니다.

     

    문자셋과 인코딩

    문자셋은 컴퓨터가 문자를 표현하고 인식하는 규칙의 집합입니다. 문자셋을 이해하기 위해서는 다음과 같은 개념들을 알아야 합니다.

    코드 포인트 (Code Point)

    코드 포인트(Code Point)는 문자를 컴퓨터에서 표현하는 데 사용되는 고유한 숫자 값입니다. 문자셋에서 문자에 할당된 고유한 숫자로, 이 숫자를 통해 컴퓨터가 해당 문자를 인식하고 처리할 수 있습니다. 코드 포인트는 일반적으로 16진수로 표기되며, 유니코드의 경우 'U+'를 앞에 붙여 표현합니다.

    유니코드는 전 세계의 모든 문자를 표현하기 위한 국제 표준 문자셋입니다. 유니코드에는 약 143,000개 이상의 문자가 등록되어 있으며, 각 문자마다 고유한 코드 포인트가 부여됩니다. 유니코드에서 코드 포인트는 U+0000부터 U+10FFFF까지 할당됩니다.

     

    예를 들어, 다음과 같은 문자들의 코드 포인트를 살펴보겠습니다.

    • 영문 대문자 'A': U+0041
    • 영문 소문자 'a': U+0061
    • 숫자 '0': U+0030
    • 한글 '가': U+AC00
    • 한자 '水'(물): U+6C34

    코드 포인트를 바이트 형태로 변환하여 저장하거나 전송하기 위해서는 인코딩 과정이 필요합니다. 인코딩 방식에 따라 코드 포인트를 표현하는 바이트 수가 달라질 수 있습니다. 예를 들어, UTF-8 인코딩에서는 영문자는 1바이트, 한글은 3바이트, 한자는 3바이트 등으로 표현됩니다.

    자바에서 코드 포인트를 다루려면, 문자열에서 특정 문자의 코드 포인트를 구하거나 코드 포인트로부터 문자를 생성하는 등의 작업을 할 수 있습니다.

    아래 예시에서는 먼저 문자열 "안녕A"의 첫 번째 문자인 '안'의 코드 포인트를 구하고, 이를 16진수 형태로 출력합니다. 그 결과, '안'의 코드 포인트인 U+D55C가 출력됩니다. 그 다음, 코드 포인트 0x1F600(이모티콘 😀)를 문자 배열로 변환한 후, 이를 문자열로 변환하여 출력합니다. 이 과정을 통해 이모티콘 😀가 출력되는 것을 확인할 수 있습니다.

    public class CodePointExample {
        public static void main(String[] args) {
            String text = "안녕A";
    
            // 문자열에서 코드 포인트 구하기
            int codePoint = text.codePointAt(0); // '안' 문자의 코드 포인트 구하기
            System.out.println("코드 포인트: U+" + Integer.toHexString(codePoint).toUpperCase()); // 코드 포인트를 16진수 형태로 출력
    
            // 코드 포인트로부터 문자 구하기
            char[] chars = Character.toChars(0x1F600); // 이모티콘 코드 포인트를 문자 배열로 변환
            String emoji = new String(chars); // 문자 배열을 문자열로 변환
            System.out.println("이모티콘: " + emoji); // 이모티콘 문자열 출력
        }
    }

    출력 결과 :

    코드 포인트: U+D55C
    이모티콘: 😀

     

     

    문자셋과 인코딩의 이해

    인코딩이란 데이터를 일정한 형식의 코드로 변환하는 과정을 말합니다. 컴퓨터는 이진수(0과 1)로 이루어진 데이터를 처리하기 때문에, 사람이 사용하는 문자나 기호를 컴퓨터가 이해할 수 있는 코드로 변환해야 합니다. 이때 사용되는 규칙을 인코딩이라고 합니다. 인코딩의 이해를 위해서는 위에서 언급한 코드 포인트 외 몇가지 중요한 개념을 알아야 합니다.

    • 가변 길이 인코딩(Variable-length encoding): 문자를 표현하는 데 필요한 바이트 수가 문자마다 다른 인코딩 방식입니다. 예를 들어, UTF-8은 영문자는 1바이트, 한글은 3바이트로 표현합니다. 가변 길이 인코딩은 효율적인 저장 공간 활용을 가능하게 하지만, 문자열 처리가 복잡해질 수 있습니다.
    • 고정 길이 인코딩(Fixed-length encoding): 모든 문자를 동일한 바이트 수로 표현하는 인코딩 방식입니다. 예를 들어, UTF-32는 모든 문자를 4바이트로 표현합니다. 고정 길이 코딩은 문자열 처리를 단순하게 하지만, 저장 공간의 낭비가 발생할 수 있습니다.
    • 바이트 오더 마크(Byte Order Mark, BOM): 인코딩 방식에 따라 바이트 순서가 다를 수 있으며, 이를 구분하기 위해 사용되는 특수한 문자입니다. 예를 들어, UTF-16과 UTF-32는 바이트 순서에 따라 빅 엔디안(Big-endian)과 리틀 엔디안(Little-endian) 두 가지 방식을 사용합니다. 이때 BOM은 문서 시작 부분에 포함되어 인코딩 방식을 명시합니다.

    인코딩 방식은 문자셋에 정의된 코드 포인트를 실제 바이트 코드로 변환하는 방법을 의미합니다. 예를 들어, UTF-8은 유니코드 문자셋을 가변 길이의 바이트 시퀀스로 인코딩하는 방식입니다. 다양한 인코딩 방식이 존재하며, 각각의 방식은 문자를 표현하는 데 필요한 바이트 수와 표현 가능한 문자 범위 등이 다릅니다. ​

     

    문자셋과 유니코드

    문자셋(Character Set)과 유니코드(Unicode)는 모두 컴퓨터에서 문자를 표현하고 처리하기 위한 체계입니다. 하지만 두 개념은 기능과 범위, 목적이 다릅니다. 이에 대해 좀 더 상세하게 알아보겠습니다.

    MBCS(Multi-Byte Character Set)

    문자셋은 컴퓨터에서 문자를 나타내기 위한 일련의 문자 집합입니다. 문자셋은 각 문자에 고유한 번호를 할당하여 컴퓨터가 이를 이해하고 처리할 수 있게 해줍니다. 문자셋은 여러 인코딩 방식을 사용하여 문자를 바이트로 변환하며, 각 인코딩은 서로 다른 문자 집합을 나타내고 처리하는 방법을 정의합니다. MBCS는 다양한 문자 집합을 표현하기 위해 1바이트 이상의 여러 바이트를 사용하는 문자 인코딩 방식입니다. MBCS는 서로 다른 크기의 바이트를 사용하여 문자를 표현할 수 있기 때문에, 다양한 언어와 문자 집합을 표현할 수 있습니다. MBCS는 문자셋의 한 종류로 볼 수 있습니다. 이와 같이 문자셋에는 여러 가지 인코딩 방식이 있으며, MBCS는 그 중 하나입니다. 다른 종류의 문자셋으로는 SBCS(Single-Byte Character Set)가 있습니다. SBCS는 문자를 표현하는 데 1바이트만 사용하는 인코딩 방식으로, ASCII가 대표적인 예입니다. ASCII는 기본 라틴 문자를 표현하기 위한 문자셋으로, 7비트(0~127)의 고유한 번호를 각 문자에 할당합니다. 이와 같이 문자셋은 특정 언어, 지역 또는 문자 집합에 대해 개발된 다양한 인코딩 방식이 있습니다.

     

    주요 MBCS 인코딩

    • EUC-KR: 대한민국의 한글 및 기본 라틴 문자를 포함한 문자 집합을 표현하기 위한 2바이트 문자 인코딩 방식입니다.
    • GB2312, GBK, GB18030: 중국어 문자를 포함한 문자 집합을 표현하기 위한 다양한 가변 길이 인코딩 방식입니다. 이러한 인코딩들은 중국어 문자 집합을 다루기 위해 설계되었습니다.
    • Shift-JIS: 일본어 문자를 포함한 문자 집합을 표현하기 위한 가변 길이 인코딩 방식입니다.

    2023.05.04 - [JAVA] - 초보 자바 프로그래밍(43) - 주요 MBCS 인코딩 방식

     

    초보 자바 프로그래밍(43) - 주요 MBCS 인코딩 방식

    🔖 INDEX ISO-8859-1 (ISO Latin-1) ISO-8859-1(Latin-1)은 서유럽 언어에 사용되는 문자들을 포함한 8비트 인코딩 방식입니다. 이 인코딩 방식은 256개의 문자를 표현할 수 있으며, 그 중 128개는 ASCII 문자와 동

    moneylogging.tistory.com

     

     

    MBCS의 장점

    • 특정 언어 및 지역에 최적화된 인코딩을 제공합니다.
    • 사용하는 문자 집합에 따라 메모리 사용량이 적을 수 있습니다.
    • 지역화에 적합한 인코딩 방식을 선택할 수 있습니다.

     

    MBCS의 단점

    • 다양한 문자 집합 간의 변환 작업이 복잡해질 수 있습니다.
    • 전 세계 모든 문자를 포함하는 표준이 아니기 때문에 국제화에 어려움이 있을 수 있습니다.
    • 문자를 처리하는 데 필요한 바이트 수가 일정하지 않아 프로그래밍 복잡도가 증가할 수 있습니다.

     

    유니코드 (Unicode)

    유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 나타내고 처리하기 위한 국제 문자 코드 표준입니다. 유니코드는 문자열을 처리하는 여러 언어 및 시스템에서 널리 사용되며, 다양한 문자 집합을 통합하여 하나의 표준화된 코드 체계를 제공합니다.

     

    주요 유니코드 인코딩 방식

    • UTF-8: 가변 길이 인코딩 방식으로, 1~4바이트를 사용해 문자를 표현합니다. ASCII 문자에 대해 완벽한 호환성을 제공하며, 웹에서 가장 널리 사용되는 인코딩입니다.
    • UTF-16: 가변 길이 인코딩 방식으로, 2바이트 또는 4바이트를 사용해 문자를 표현합니다. 자바와 .NET 프레임워크에서 기본 문자 인코딩으로 사용됩니다.
    • UTF-32: 고정 길이 인코딩 방식으로, 모든 문자를 4바이트로 표현합니다. 메모리 사용량이 많지만 인덱싱 및 처리가 빠르다는 장점이 있습니다.

    2023.05.04 - [JAVA] - 초보 자바 프로그래밍(42) - 주요 유니코드 인코딩 방식

     

    초보 자바 프로그래밍(42) - 주요 유니코드 인코딩 방식

    🔖 INDEX UTF-8 인코딩 UTF-8(Unicode Transformation Format 8-bit)은 유니코드 문자를 가변 길이의 바이트로 인코딩하는 방식으로, 각 문자에 따라 바이트 길이가 다릅니다. 유니코드는 전 세계 언어의 문자

    moneylogging.tistory.com

     

    유니코드의 장점

    • 전 세계의 거의 모든 문자를 하나의 표준으로 표현할 수 있습니다.
    • 다양한 문자 집합 간의 변환 작업이 간단해집니다.
    • 국제화 및 지역화에 용이합니다.

     

    유니코드의 단점

    • 고정 길이 인코딩 방식(예: UTF-32)은 메모리 사용량이 크다는 단점이 있습니다.
    • 인코딩 방식에 따라 처리 속도가 느릴 수 있습니다.

     

    결론적으로, 유니코드는 전 세계의 거의 모든 문자를 포함하는 국제 문자 코드 표준으로, 국제화 및 지역화에 용이한 장점이 있습니다. 반면에 MBCS는 특정 언어 및 지역에 최적화된 인코딩을 제공하며, 메모리 사용량이 적은 경우도 있습니다. 하지만 국제화에 어려움이 있으며, 문자 집합 간의 변환 작업이 복잡해질 수 있습니다. 따라서 프로젝트의 요구사항과 목표에 따라 적합한 문자 인코딩 방식을 선택하는 것이 중요합니다.

     

     

    댓글