애플사이다의 iOS 개발 일지

[문자열] 유니코드 및 유니코드 인코딩이 필요한 이유 (간단 요약) 본문

비전공자용 노력/CS 공부

[문자열] 유니코드 및 유니코드 인코딩이 필요한 이유 (간단 요약)

Applecider 2021. 9. 22. 19:28

안녕하세요. 애플사이다 입니다.

Swift Language Guide의 세 번째 챕터 Strings and Characters에 "유니코드"와 "인코딩"이 등장합니다.

 

ASCII, ANSI, CP949, 유니코드 등 문자를 표현하기 위한 표준을 설명하는 자료는 방대합니다.

이 중에서 왜 유니코드, 유니코드 인코딩이 필요한지 간단히 요약해보겠습니다.

 


유니코드 (Unicode)가 필요한 이유는?

- 전 세계 언어의 문자를 컴퓨터로 처리하기 위해

사람은 문자를 읽을 수 있고, 컴퓨터는 0&1만을 읽을 수 있다. 컴퓨터로 문자를 처리하려면 0&1로 만들어야 한다.

따라서 문자를 숫자 (0&1)로 변환하는 표준을 만들었다. 문자 1개를 숫자 1개로 치환하는 1:1 Mapping 형태이다.

 

이러한 표준을 문자 코드표 (Character Code Set)라고 한다. 예를 들어 ASCII (아스키코드)가 있다.

(ASCII는 8bit 중 7bit를 사용하여 128개 (2^7) 문자를 표현한다. A는 10진법으로 65, 2진법으로 1000001 이다.)

 

ASCII는 영어 문자만 표현할 수 있어서 다른 언어도 표현할 수 있는 표준을 만들었다. 

하지만 여러 개의 표준이 혼재해서 혼동이 발생했다. 따라서 이러한 표준들을 통합하여 유니코드를 만들었다.

(유니코드는 16bit를 사용하여 65536개 (2^16) 문자를 표현한다. 전 세계 언어와 특수문자를 표현할 수 있다.)

유니코드 인코딩 (Encoding)이 필요한 이유는?

- 유니코드 문자를 해석하기 위해

문자 인코딩이란 문자 코드표를 해석하는 방식이다. 인코딩 방법은 UTF-8, UTF-16 등 여러 종류가 있다.

 

동일한 문자 코드표를 사용하는데, 왜 해석 방식이 다를 수 있을까?

메모리 때문이다. CPU에서 데이터를 처리하거나, 네트워크로 데이터를 전송할 때, 데이터 크기는 작을수록 좋다.

따라서 데이터를 최소화하기 위해 개발자는 상황에 맞는 인코딩 방법을 사용한다.

 

ASCII 문자는 모두 1byte의 메모리 공간을 차지한다. 반면, 유니코드 문자의 경우 영어는 1byte, 한글은 2byte, 다른 특수문자는 3byte 등 문자마다 데이터 크기가 다르다. 이러한 가변적인 메모리 사용 방식은 컴퓨터에게 혼동을 초래하므로 각 문자가 몇 byte인지 명시하는 인코딩을 사용해야 한다.

(엄밀히는 ASCII 문자가 모두 1byte라고 해서 인코딩이 필요 없는 것은 아니고, 7bit 인코딩을 사용한다.)

 

UTF-8은 문자를 표현하기 위해 사용하는 메모리 단위가 8bit (1byte)이다. UTF-16은 메모리 단위가 16bit (2byte)이다.

한글을 UTF-8로 저장하면 3byte 이상을 차지하고, UTF-16으로 저장하면 2byte 이상을 차지한다.

 

 

- Reference

🍎 포스트가 도움이 되었다면, 공감🤍 / 구독🍹 / 공유🔗 / 댓글✏️ 로 응원해주세요. 감사합니다.

Comments