본문 바로가기
Java/기초문법

[Java] ASCII 와 유니코드

by worldcenter 2024. 9. 23.

 

Java를 통해 개발을 하면서 제일 다루기 힘든 데이터 타입이 char 라고 느꼈습니다. 

하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴 이라고 합니다. 문자 리터럴은 유니코드로 변환되어 저장되는데, 유니코드는 세계 각국의 문자를 0 ~ 65535 숫자로 매핑한 국제 표준 규약 입니다.

자바는 이러한 유니코드를 저장할 수 있도록 char 타입을 제공합니다.

char var1 = 'A'; // 'A' 문자와 매핑되는 숫자: 65로 대입
char var3 = '가'; // '가' 문자와 매핑되는 숫자: 44032로 대입

 

유니코드는 정수 형태이므로 char 타입도 정수 타입에 속합니다. 그렇기 때문에 char 변수에 작은 따옴표로 감싼 문자가 아니라 유니코드 숫자를 직접 대입할 수도 있습니다.

 

 

개발 과정에서 잘못 코딩을 했던 부분을 보면서 ASCII와 유니코드에 대해서 설명드리겠습니다.

private List<Character> numList = new ArrayList<>();
for (char i = 1; i < 10; i++) {
    numList.add(i);
}

 

일단 char 타입의 i 라는 변수에 '1' 이 아닌 정수 1을 저장함으로써 유니코드를 바로 대입해버렸습니다.

즉, char i = '1' 로 저장하게 되면 유니코드로 변환되어 i = \u0031(숫자 1)로 저장을 합니다. 하지만 char i = 1 로 저장함으로써 유니코드 i = \u0001 (제어 문자)로 저장되게 됩니다. 작은따옴표(')를 빼먹음으로써 전혀 다른 의미가 변수에 저장되게 됩니다.

 

 

ASCII 란?

ASCII(아스키)는 영문 알파벳을 사용하는 문자 인코딩 입니다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있습니다.

아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총 128개로 이루어져 있습니다.

아스키 코드는 0 ~ 31번, 127번까지는 제어 코드이고 32 ~ 126번까지는 출력 가능한 코드 입니다.

아스키의 문자표는 다음 링크에서 확인이 가능합니다.

 

 

유니코드

유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준입니다. 아스키 코드는 영어 기반의 문자만 지원하고 다른 언어의 문자나 기호는 표현할 수 없었던 반면 유니코드는 전 세계의 모든 언어 및 기호를 포함합니다.

유니코드는 아스키의 확장판으로 아스키에서 정의된 문자의 인코딩을 그대로 유지하므로, 아스키 코드로 표현된 문자는 유니코드에서도 동일하게 해석됩니다.