본문 바로가기

프로그래밍 언어/Java

Java char 데이터 타입과 유니코드의 관계

Java char 데이터 타입과 유니코드의 관계

Java에서 char 타입은 **단일 문자를 저장하는 기본 데이터 타입**입니다. 하지만 일반적인 ASCII 문자뿐만 아니라, 다양한 언어와 기호를 포함하는 **유니코드(Unicode)**를 지원한다는 점에서 중요한 의미를 가집니다. 본 글에서는 char 타입의 동작 방식과 유니코드와의 관계를 깊이 있게 살펴보겠습니다.

 

 

목차

  1. Java의 char 타입이란?
  2. char 타입의 메모리 구조
  3. 유니코드란 무엇인가?
  4. char 타입과 유니코드의 관계
  5. 유니코드 보조 문자(Surrogate Pairs)
  6. Java에서 유니코드 문자열 다루기
  7. 결론

 

1. Java의 char 타입이란?

char 타입은 단일 문자를 저장하는 **2바이트(16비트) 크기의 기본형 데이터 타입**입니다. 문자 하나를 저장하지만, 내부적으로는 정수(유니코드 값)로 취급됩니다.

🔹 char 타입 선언 및 초기화

public class CharExample {
    public static void main(String[] args) {
        char letter = 'A';  // 문자 저장
        char digit = '7';   // 숫자도 문자로 저장 가능
        char symbol = '@';  // 특수 문자 저장

        System.out.println(letter);  // A
        System.out.println(digit);   // 7
        System.out.println(symbol);  // @
    }
}

 

 

 

2. char 타입의 메모리 구조

Java의 char는 **16비트(2바이트) 크기**로, 0~65535(0x0000~0xFFFF)의 값을 가질 수 있습니다. 이는 **유니코드 문자 집합의 기본 영역(BMP, Basic Multilingual Plane)**을 포함하는 범위입니다.

🔹 char의 메모리 할당

  • 16비트(2바이트) 크기를 가지며, 부호 없는 정수 값으로 저장됨
  • 문자가 내부적으로 유니코드 정수 값(코드 포인트)으로 변환됨

 

 

 

3. 유니코드란 무엇인가?

유니코드는 **전 세계의 모든 문자를 표현하는 국제 표준 문자 인코딩 체계**입니다. 모든 문자는 고유한 코드 포인트(Code Point)를 가지며, 16진수 표기법(U+XXXX)으로 나타냅니다.

🔹 유니코드 예제

문자 유니코드 값
A U+0041
U+D55C
😊 U+1F60A

 

 

 

4. char 타입과 유니코드의 관계

Java의 char는 유니코드 문자를 저장하는 데 사용됩니다. 그러나, 모든 유니코드 문자를 단일 char로 표현할 수 있는 것은 아닙니다.

🔹 char와 유니코드 코드 포인트

  • char는 유니코드의 기본 영역(BMP, U+0000 ~ U+FFFF)만 표현 가능
  • U+10000 이상의 문자는 **보조 문자(Surrogate Pairs)**로 처리해야 함

 

 

 

 

5. 유니코드 보조 문자(Surrogate Pairs)

일부 유니코드 문자는 16비트로 표현할 수 없으므로, **두 개의 char를 조합하여 표현**하는 방식이 필요합니다. 이를 **서로게이트 페어(Surrogate Pairs)**라고 합니다.

🔹 보조 문자 예제

public class UnicodeExample {
    public static void main(String[] args) {
        char high = '\uD83D';  // 상위 서러게이트
        char low = '\uDE0A';   // 하위 서러게이트
        String emoji = new String(new char[]{high, low});
        
        System.out.println(emoji);  // 😊 출력
    }
}

 

 

 

6. Java에서 유니코드 문자열 다루기

유니코드 문자열을 다룰 때 StringCharacter 클래스를 활용하면 유용합니다.

🔹 코드 포인트 단위 처리

public class UnicodeHandling {
    public static void main(String[] args) {
        String text = "😊";  // 보조 문자 포함

        System.out.println("문자 길이: " + text.length()); // 2
        System.out.println("코드 포인트 수: " + text.codePointCount(0, text.length())); // 1
    }
}

 

 

 

7. 결론

Java의 char 타입은 **16비트 유니코드 문자를 저장**하지만, 보조 문자(Surrogate Pairs)를 고려할 때 문자열 처리에는 StringCharacter 클래스 활용이 필수적입니다. 이를 이해하면 다국어 지원 및 특수 문자 처리가 더욱 쉬워집니다.