컴퓨터가 문자열을 이해하고 표현하는 방법

devapploper·2020년 12월 29일
5
post-thumbnail

매일 컴퓨터 또는 스마트폰을 통해 보는 글자들.

어떻게 컴퓨터는 이 문자들을 이해하고 알맞게 나타낼 수 있는 걸까요? 간단하게 작성해보았습니다.

Character Set

시작하기에 앞서 이해를 돕기 위해 이전 내용을 잠시 복습해봅시다.

"CPU가 이해하는 언어는 숫자이고, 모든 코드는 컴파일러에 의해 숫자로 변환 과정을 거친다. 이러한 과정을 통해 우리가 적는 코드를 CPU가 이해할 수 있다"

문자열도 이와 마찬가지입니다. 컴퓨터가 이해하기 위해서는 숫자로 변환과정을 거쳐야해요.

그런데 글자인 문자가 어떻게 숫자가 된다니. 어떻게 이게 가능할까요? 🤔

컴퓨터는 각각의 문자에 해당하는 숫자를 배정합니다.

이를 통해 문자열을 자신이 알아들을 수 있도록 숫자로 변경하거나, 사용자가 알아들을 수 있도록 숫자에서 문자열로 변경하는 것이죠.

이것을 "character set(문자 모음)이라는 양방향 매핑을 형성한다" 라고 합니다.

그럼, 키보드에 키를 누르면 어떤 과정을 통해 사용자에게 보여질 수 있을까요?

키보드에 키를 누르면 해당 문자에 배정된 숫자를 컴퓨터에 입력합니다.

컴퓨터가 받은 입력(숫자)은 문서 작성 프로그램에 도달하고, 해당 숫자와 연관된 알맞는 문자 모양으로 변환하여 화면에 출력합니다.


Unicode

만약 혼자만 컴퓨터를 사용한다면 컴퓨터가 어떤 숫자를 어떤 문자와 연관 짓든 상관이 없을거에요.

"ㅋ" 문자를 숫자 1에 매핑하거나 99999에 매핑하거나 아무래도 좋을거라는 말입니다.

그런데 컴퓨터가 다른 컴퓨터와 교류를 해야된다면 상황은 완전히 달라집니다.

이때는 같은 character set을 사용해야만, 서로가 말하고자 하는 바를 적절하게 전달할 수 있을거에요.

왜냐하면 서로 다른 character set을 사용하면, 양쪽에서 보여지는 문자열이 다르게 나타날테니까요.

컴퓨터간에 문자열을 주고 받기 위해서는 어떤 문자를 어떤 숫자로 변환할지, 모두가 약속한 기준을 사용해야할거에요.

그동안 여러 기준이 있었지만, 현대 가장 많이 사용하고 있는 기준은 유니코드(Unicode)에요.

즉, 유니코드는 현재 거의 모든 컴퓨터가 사용하는 character set 라는 것이죠.

(유니코드 공식 웹사이트: http://unicode.org)

예를 한번 볼까요? 여기 cafe 라는 문자열이 있습니다.

유니코드를 보면 아래 문자열에 각각의 문자가 숫자가 다음과 같이 매핑되어있음을 알 수 있습니다.

cafe
9997102101

각각의 문자와 연관되어있는 숫자를 "code point"라고 합니다.

그래서 이것을 "소문자 c가 사용하는 code point는 99이고, a가 사용하는 code point는 97이다"라고 말할 수 있습니다.

그리고 유니코드는 영어뿐만이 아닌 이 세상의 모든 문자를 표현할 수 있도록 만들어져있기 때문에, 불어로 카페를 표현할 때 쓰는 é 또한 나타낼 수 있습니다.

café
9997102233

우리가 매일 보고 쓰는 이모티콘! 이모지라고도 하죠? 이것 또한 유니코드와 매핑되어있는 "문자" 입니다.

💩😀
128169128512

.
.
.

이번 포스트에서는 컴퓨터가 문자열을 이해하고 표현하는 법에 대해 알아보았습니다.

어떤가요? 이제는 화면에 보여지는 글자를 컴퓨터가 어떻게 나타내는지 좀 더 친숙해진 느낌이지 않나요? 🙂

저는 조금 더 친숙해진 것 같아요. ㅎㅎ

그동안 빈번히 마주쳤지만 콕 집어서 무엇이라고는 말할 수 없었는데, 이제는 유니코드가 character set이라고 불리는 것이며, 그게 또 어떤 것인지 간단하게 얘기할 수 있을 것 같아요!


마무리

컴퓨터에게 문자는 숫자이다.
각 문자에 해당되는 숫자가 있고, 그것들의 모음을 character set라고 한다.
가장 널리 알려지고 사용되는 character set은 유니코드다.
character set의 숫자를 code point라고 한다.
이모지 또한 code point가 있는 문자에 속한다.

이제부터 한동안은 화면에 글자를 볼 때마다 "이것들은 사실 모두 숫자야"라는 생각을 할 것 같아요.

간단한 내용이었지만 역시나 어렴풋이 알고 있던 내용을 이번 기회에 조금 더 확실히 짚고 넘어가니까 개인적으로 너무 좋았습니다.

제가 도움을 받았던 것처럼, 다른 누군가에게도 도움이 되었으면 좋겠네요!

읽어주셔서 감사합니다. 🙇‍♂️


작성시 참고한 자료: 2.2 Strings - Swift Apprentice (Raywenderlich.com)

profile
app 을 dev 하는 developer. devapploper 입니다

0개의 댓글