ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드(Code), 0과 1의 약속
    코딩 배우기 2020. 9. 24. 23:35

    컴퓨터, 생각하는 방식이 이렇게 단순해도 될까?

    대한민국 스마트폰 사용률은 2017년 이후 90%가 넘습니다. 이렇게 우리 생활에 익숙하고 조그마한 스마트폰은 정말 많은 일을 처리하고 있습니다. 그런데 덩치도 더 큰 컴퓨터가 생각하는 방식이 0 또는 1과 같이 단순해도 될까요? 아래의 대화를 보면서 함께 생각해 보겠습니다.


    컴퓨터와 대화, 답할 수 없는 질문

    '예, 아니요'로 단순하게 대답하라고 하니 '당신은 하루에 커피를 몇 잔 마십니까?'와 같은 질문에는 답변할 방법이 없습니다. '예, 아니요'로 몇 잔인지를 답할 수 없으니까요. 하지만 이런 상황이 되면 고심 끝에 해결점을 찾는 사람들이 언제나 있습니다. 누군가 아래 그림과 같이 컴퓨터다운 해결 방법을 찾았습니다. 애초에 답할 수 없는 질문을 했으니, 답할 수 있는 질문을 하는 것입니다.


    컴퓨터와 대화, 답할 수 있는 질문

    '예, 아니요' 둘 중 하나만 선택할 때는 두 가지 의미밖에 전달되지 않았는데, '예-아니요'를 연결해서 사용하니 두 가지 이상의 의미도 전달할 수 있게 되었습니다. 그럼 이제 '예, 아니요' 대신에 컴퓨터가 선호하는 단순한 표현인 '0, 1'로 대화를 바꿔보겠습니다.


    컴퓨터와 대화, 응용

    컴퓨터 개발자들은 조그마한 단위인 비트를 이렇게 여러 번 연결하는 방식으로 여러 가지 표현을 할 수 있게 만들었습니다. 그리고 위 대화에서 '1 잔은 00'이고 '2 잔은 01'이라고 한 것처럼, 각 다른 비트의 조합이 의미하는 것들을 '약속'하였습니다.

    0과 1의 약속, 코드(Code)

    이렇게 '약속된 0, 1로 만들어진 부호'를 코드라고 합니다. 먼저 코드의 사전적 의미를 알아보겠습니다.

    code [koʊd]
    1. 암호, 부호
    2. (사회적) 관례[규칙]
    3. (조직 국가의) 법규[규정]

    부호의 의미도 있지만 관례, 규정이라는 뜻도 있습니다. 좀 더 친숙한 표현으로는 '약속'을 의미합니다. 그래서 프로그래밍에서 '코드'란 서로 간의 규정 또는 약속의 의미가 더해진 '약속된 부호'로 이해할 수 있습니다.

    문자를 표현할 수 있는 최소한의 크기, 바이트(Byte)

    컴퓨터 개발자들은 0, 1로 여러 가지 표현을 만드는 방법을 알게 되었습니다. 그 후 사람의 언어와 컴퓨터 언어를 연결하기 위해 약속이 몇 가지나 필요한지를 곰곰이 따져 보았습니다. 그 과정에서 영문 알파벳과 숫자, 특수문자의 개수를 일일이 세어보고, 비트를 8개 정도 연결하면 충분한 약속이 만들어질 수 있다는 것을 알게 되었습니다. 그래서 비트 8개를 묶어서 1바이트Byte라는 새로운 단위를 만듭니다.

    왜 바이트라고 처음에 표현했는지는 알 수 없지만, 대부분 알려진 이야기로는 상상하기 어렵지 않습니다. 한 입 베어 물어 먹을 만큼 조그마한 단위를 모아놓은 조각이라는 의미에서 '한 입'이라는 뜻의 영어단어 바이트Bite에서 따왔다고 알려져 있습니다.

    bite [baɪt]
    1. 한 입(베어 문 조각)

    She took a dainty little bite of the apple.
    그녀가 사과를 얌전히 한 입 베어 먹었다.

    8비트, 즉 1바이트로 표현된 약속의 예를 하나 보겠습니다. 아래 예시는 아스키ASCII라고 불리는 '약속'에 근거해 영어 대문자 A를 표현한 비트의 조합입니다.


    1바이트 '예, 아니요' 표현 (대문자 A)
    1바이트 '0, 1' 표현 (대문자 A)

    그리고 아래는 영어 소문자 c를 표현한 비트의 조합입니다.


    1바이트 '예, 아니요' 표현 (소문자 c)
    1바이트 '예, 아니요' 표현 (소문자 c)

    이와 같은 비트의 나열은 어디까지나 약속입니다. 따라서 서로 다른 약속을 따르면 전혀 다르게 해석될 수 있습니다.

    예를 들어 위의 아스키코드는 '01100011'을 소문자 c로 약속했지만, 제가 임의로 '아무개 코드'라는 걸 만들고 '01100011'을 '#'으로 정의했다고 가정해봅니다. 아무개 코드로 해석한 사용자는 아래와 같이 소문자 c 대신에 #으로 이해하게 됩니다. 따라서 전달하고 해석할 때는 동일한 코드를 사용하는 것이 무엇보다 중요합니다.


    코드(code) 해석

    인코딩, 디코딩, 디코딩 오류

    앞에서 살펴본 대로 전달할 때는 아스키코드로, 해석할 때는 아무개 코드로 해석하면 정보가 잘 못 전달됩니다. 이런 사항을 디코딩 오류Decoding Error라고 합니다. 사람의 언어를 컴퓨터의 언어로 바꾸는 과정을 인코딩Encoding, 그 반대의 과정을 디코딩Decoding이라고 합니다.


    인코딩 / 디코딩

    디코딩 오류가 나면 아래 화면과 같이 글자가 모두 깨져 보이기도 합니다. 그래서 동일한 약속을 서로 공유하는 것이 무엇보다 중요합니다.


    인코딩 오류

    지금까지 컴퓨터와 대화하기 위한 약속된 부호인 코드(Code)와 더 나아가 문자를 표현할 수 있는 최소한의 크기인 바이트(Byte), 사람과 컴퓨터 간의 언어를 해석하기 위한 과정인 인코딩(Encoding) / 디코딩(Decoding)에 대해서 알아보았습니다.


    부족한 글, 끝까지 읽어주셔서 감사합니다.


    참고문헌

    Do It! 첫코딩, 정동균, 이지퍼블리싱, 2019.11.20

    2012-2019 스마트폰 사용률, 브랜드, 스마트워치, 손목시계에 대한 조사, 한국 갤럽, 2019.08.29

    댓글

Designed by Tistory.