개발/자바

유니코드와 UTF-8 인코딩

핸생이 2024. 12. 24. 11:14

개발자라면 컴퓨터와 기계가 서로 대화를 주고 받을 수 있게 기본이 되는 인코딩에 관련된 기본적인 공부는 필요하다고 생각합니다. 따라서 컴퓨터는 바이트 단위로 프로그램 입력을 처리하는데 인코딩과 관련된 역사를 보면 이해하는데 큰 도움이 됩니다.


처음 ASCII가 발명 되었을때 각 제조사마다 다른 문자 인코딩 방식을 사용했기에 호환성 문제가 발생하였습니다. 이를 해결하고자 ANSI에서 영어 문자와 기호를 표현하는 표준 코드인 ASCII를 개발하였고 7비트로 최대 128개의 문자를 표현하였습니다. 그러나 이는 다른 언어를 표현하기에는 부족하다는 한계가 있었습니다.


추후에 8비트로 확장한 ASCII가 등장하였지만 256개의 한계로 글로벌화로 다른 문화권의 언어까지 담기에는 충분치 못했습니다.이에 맞춰 유니코드가 개발 되었습니다. 유니코드는 문자와 기호에 고유한 번호를 부여합니다. 예를들어 ‘A’는 U+0041이고 ‘가’는 U+AC00으로 정의됩니다. 초기에는 2바이트로 표현 하였으나 점차 4바이트로 확장해 나갔습니다. 


세상에는 완벽한것이 없는거처럼 유니코드에도 단점은 존재했으니 단순 문자를 저장 할 때 비효율이라는 문제가 발생했습니다. ‘A’라는 문자는 1바이트면 충분했지만 4바이트로 고정된 크기만큼 전송해야 하니 3바이트만큼의 공간이 낭비되는것 입니다.

이를 해결하고자 UTF-8이 개발되었고 효율적인 문자 전송 및 저장을 위해서 가변 길이로 인코딩이 되었습니다.

그래서 정리해보자면 유니코드는 문자의 고유번호를 정의하는 체계이고 UTF-8은 유니코드 값을 바이트로 변환하는 방식을 뜻합니다.예를들어 ‘A’는 유니코드에서는 U+0041로 정의하고 UTF-8에서는 0x41(1바이트)로 변환합니다.

UTF-8에서 한글이 3바이트를 사용하는 이유는 설계 원칙을 보면 알 수 있습니다.
1바이트 - ASCII에서 정의했던 문자를 사용합니다.
2바이트 - 라틴 확장 문자 ,그리스어 , 비교적 작은 범위의 문자를 사용합니다.
3바이트 - 한글 , 한자 , 일본어 등 복잡한 문자를 사용합니다.
4바이트 - 이모지와 같은 고유 문자를 사용합니다.


위에서 말했던거처럼 유니코드는 고유번호를 정의하는 체계라고 했던거처럼 한글 음절 문자의 범위는 U+AC00 ~ U+D7AF까지 정의되어 있습니다. 이는 초성 19개 중성 21개 종성 28개의 모든 조합인 11,172자가 포함 되어있습니다.