유니코드? 아스키? RGB? 그게뭔데 대체
한글이 자꾸 깨지는 것에 대하여
0. 이진법과 비트
컴퓨터에 입력되는 정보들은 단순한 숫자, 문자일 수도있고 사진일 수도있고 동영상일 수도 있습니다. 정보의 형태는 너무나도 다양합니다. 어떻게 이렇게 다양한 정보를 처리할 수 있을 까요? 컴퓨터는 0과 1로 이루어진 비트(bit)로 정보를 처리합니다. 그럼 도대체 어떻게 0과 1만으로 그 많은 정보를 나타낼 수 있을까요?
0과 1은 '켜다/끄다'의 개념입니다. 실제로 컴퓨터에는 무수히 많은 트랜지스터가 있고, 이를 키고 끔으로서 0과 1을 나타냅니다. 여기서 하나, 키고 끄는 트랜지스터 하나가 한 비트라고 볼 수 있습니다. 하나의 바이트(Byte)는 8개의 비트를 의미합니다. 각 비트는 0과 1, 두가의 경우를 표현할 수 있으니 2의 8승만큼 표현할 수 있습니다. 1000바이트는 킬로바이트(KB), 또다시 1000개의 킬로바이트는 메가바이트(Mb)가 됩니다.
이렇게 무수히 많은 트렌지스터를 키고 끄면서 2진법으로 숫자를 표현할 수 있게됩니다. 그럼 문자는 어떻게 표현할까요? 우리는 숫자를 문자로 표현할 수 있도록 '약속'했습니다.
1. 아스키코드
아스키코드는 이런 약속입니다. "우리 65(10진법)을 대문자 A라고 정하자. 48(10진법)을 숫자 0이라고 정하자." 65를 이진법으로 나타내면 1000001 이되죠. 48을 이진법으로나타내면 110000이 됩니다. 컴퓨터가 1000001을 읽었을 때 A를 표현해주고 1100000를 읽으면 숫자 '0'을 나타내줄 수 있게 됩니다! 엄청나죠. 아스키코드는 총 8개의 비트로 128가지를 표현하였습니다. 정말 중요한 약속이죠
사람들은 욕심이 생겼습니다. 128가지가아니라 더 많은 것을 표현하고 싶습니다. 유니코드(Unicode)는 아스키코드보다 더 많은 비트를 사용하여 더 많은 표현을 할 수 있습니다. 128가지가아니라 엄청나게 많은 표현을 할 수 있습니다. 우리는 0과 1만을 가지고 숫자와 문자를 표현할 수 있습니다 !
2. 16진법과 유니코드
먼저 16진법에대해서 설명할까 합니다. 컴퓨터분야에서는 16진수를 많이 사용하는데 자릿수 하나가 2의 4승을 표현할 수 있기 때문입니다. 단 두개의 자리 수 만으로 하나의 바이트를 표현할 수 있습니다. (8개의 비트가 하나의 바이트)
16진수에서 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f 으로 이루어져 있습니다. a가 10에해당하고 f가 15에 해당합니다.
변환 인코딩 형식(UTF, UCS Transformation Format)인 UTF-7, UTF-8, UTF-16, UTF-32가 있으며, 위의 아스키코드와 호환이 가능한 UTF-8 형식이 가장 많이 사용됩니다.
이모티콘 옆의 숫자가 보이시나요? U+는 유니코드라는 뜻이고 뒤는 16진법으로 표기되어있습니다. 다시말해 U+1F600는 10진법으로 유니코드로 된 128512라는 숫자입니다. 이 숫자는 2진법으로 11111011000000000입니다. 우리는 이 숫자에 웃는 그림을 불러오기로 약속을 한 것입니다. 친구에게 이모티콘을 보낼 때 사실은 11111011000000000이라는 숫자를 보낸 것이고 친구의 핸드폰이 11111011000000000를 읽고 저장되어있던 웃는 그림을 나타내주는 것입니다. 우리는 이제 웃는 이모티콘을 친구에게 보낼 수 있습니다 !
3. RGB
구글에 color picker이라고 검색을 해보면 색깔을 선택할 수 있습니다. 이때 밑에 HEX라는 게 보이시죠? Hex는 16진수를 의미합니다. 왜 여기에 갑자기 16진수가 들어가있을까요?
RGB값은 (Red,Green,Blue)의 값을 의미합니다. 그리고 각 자리의 값은 해당 색이 얼마나 들어갔는지를 표현합니다. (0,0,0)은 모든 숫자가 0이므로 아무색깔도 존재하지 않습니다. 그래서 검은색이 나옵니다. 반대로 (255, 255, 255)를 입력하면 모든 색깔이 최대로 섞였기 때문에 흰색이 나옵니다.
(255,0,0)은 빨간색, (0,255,0)은 초록색, (0,0,255)는 파란색입니다. 255가 의미하는 것이 무엇일까요? 바로 16진수로 FF입니다. 두자리의 16진수로 표현할 수 있는 최대치죠. 맨 처음 앞자리 두개는 Red, 그 뒤 두자리는 Green, 마지막 두자리는 Blue로 정의하였습니다. (예: #FF0000은 빨간색)
더 생각해보기
컴퓨터에게 10 이라는 숫자를 던져주었습니다. 컴퓨터는 이 숫자가 2진법인지, 16진법인지 알 도리가 없습니다. 그래서 우리는 앞으로 16진수를 표현할 때 앞으로 0x라는 것을 붙여주기로 약속합니다. 0x41이 되면 65가됩니다. ((16^1)*4 + (16^0)*1)
다음포스팅에서는 메모리가 어떻게 사용되는지, 힙과 스택에대해서 알아보겠습니다.
'기본소양 > 컴퓨터공학 Basic' 카테고리의 다른 글
[코딩, 처음입니다] Big O와 Big Ω, 알고리즘 실행시간 표기법 (0) | 2021.02.01 |
---|---|
Performance Measure (0) | 2021.01.27 |
[ 코딩, 처음입니다 ] Method vs Functhion (0) | 2021.01.02 |
[ 코딩, 처음입니다 ] Library, Package, Module (2) | 2021.01.02 |
댓글