어제 오늘 내일

[Java] 코드 포인트(Code Point) vs 코드 유닛(Code Unit) 본문

IT/Java

[Java] 코드 포인트(Code Point) vs 코드 유닛(Code Unit)

hi.anna 2024. 12. 9. 22:22

 

유니코드 코드 유닛 (Unicode Code Unit)

Java에서는 기본적으로 UTF-16 인코딩을 사용합니다.

유니코드는 여러 문자 집합을 지원하며,

각 문자는 하나 이상의 유니코드 코드 유닛으로 표현될 수 있습니다.

 

UTF-16에서 대부분의 문자는 1개의 16비트 코드 유닛으로 표현됩니다.

하지만, 일부 문자나 이모지 등은 2개의 코드 유닛 ( surrogate pair)을 사용하여 표현됩니다.

 

코드 유닛의 갯수는

String의 length() 메소드를 사용하여 셀 수 있습니다.

 

유니코드 코드 포인트 (Unicode Code Point)

유니코드 코드 포인트는 실제로 한개의 문자를 나타냅니다.

하나의 코드 포인트는 반드시 1개 이상의 코드 유닛을 사용하여 표현되고,

하나의 코드 유닛은 16비트입니다.

 

코드 포인트의 갯수는

String의 codePointCount() 메소드를 사용하여 셀 수 있습니다.

 

 

예제

  코드  

public class Example {
    public static void main(String[] args) {
        String str1 = "A";      // 1개의 코드 유닛, 1개의 코드 포인트
        String str2 = "😀";    // 이모지, 2개의 코드 유닛, 1개의 코드 포인트

        // 일반문자
        System.out.println("str1의 Code Unit 갯수: " + str1.length());    // 1
        System.out.println("str1의 Code Point 갯수: " + str1.codePointCount(0, str1.length()));    // 1

        // 이모지
        System.out.println("str2의 Code Unit 갯수: " + str2.length());    // 2
        System.out.println("str2의 Code Point 갯수: " + str2.codePointCount(0, str2.length()));    // 1

    }
}

 

  결과  

str1의 Code Unit 갯수: 1
str1의 Code Point 갯수: 1
str2의 Code Unit 갯수: 2
str2의 Code Point 갯수: 1

 

  설명  

  • code unit은 length() 메소드를 사용하여 구할 수 있고,
  • code point 길이는 codePointCount() 메소드를 사용하여 구할 수 있습니다.
  • str1은 단일 문자 "A"로 구성되어 있습니다.
    • code unit : 1
    • code point : 1
  • str2는 이모지입니다. 이모지는 surrogate pair 문자입니다.
    • code unit : 2
    • code point : 1

 

 

반응형
Comments