본문 바로가기
카테고리 없음

코딩을 위해 먼저 컴퓨터의 언어를 이해해야 합니다.

by UltraJimmy 2023. 1. 19.
반응형

코딩이란 도대체 무엇이고 왜 코딩이 필요할까요? 어렵게 생각할 필요가 없습니다. 컴퓨터의 언어는 인간의 언어와 비슷한 점이 많습니다. 다면 인간의 글이 아니라 컴퓨터의 언어로 컴퓨터에게 명령을 하고 우리가 원하는 것을 컴퓨터가 수행할 수 있도록 해야 하는 것이 차이점입니다. 이번 포스팅에서는 컴퓨터의 언어가 무엇인지 살펴보고 컴퓨터 언어를 몰라도 컴퓨터와 대화할 수 있도록 우리는 도와주는 변역 역할을 해주는 프로그래밍 언어에 대해서 알아보겠습니다.

 

컴퓨터의 언어는 무엇으로 구성되어 있나요?

컴퓨터의 언어를 배우는 것은 우리가 외국어를 배우는 것과 비슷합니다. 외국어를 배워보신 분들을 아시겠지만 새로운 언어는 계속 접하고 많이 사용해야 실력이 늘게 되듯이 컴퓨터의 언어도 외국어를 배우는 것처럼 많이 접하고 사용해야 합니다. 우리가 언어를 배우는 방법을 먼저 살펴보겠습니다. 우리가 언어를 이해하는 방법은 우리가 '사과'라고 부르는 빨간색의 동그란 과일은 영어로 'apple'로 얘기해도 사람들의 머릿속에는 사과의 이미지가 떠오릅니다 즉, 언어는 사람과 사람사이에 정보를 전달하기 위한 수단이고 머리로는 언어를 생각하지는 않습니다. 먼 옛날 언어대신 그림으로 소통을 하던 우리의 선조들의 의사소통 방법과 마찬가지입니다. 

 

컴퓨터 언어의 세계도 인간의 세계와 비슷합니다. 컴퓨터와 사람이 대화하는 언어에도 많은 종류가 있듯이 컴퓨터는 한 가지 방법으로만 생각하고 이해합니다. 컴퓨터는 '비트'라는 단위로 이해하며 생각합니다. '비트'에는 두 가지 종류만 있습니다. 바로 '0'과 '1' 입니다. 컴퓨터가 개발된 초기에는 '예'와 '아니요'로 간단명료하게 표현했습니다. 즉 비트는 '0'과 '1' 중 하나의 정보를 가지는 정보단위입니다.

 

그런데 조그만 스마트폰조차도 상상할 수 없을 만큼 다양한 일을 처리할 수 있는데 컴퓨터가 어떤 일을 수행하는 방식이 이렇게 단순해도 될까 하는 궁금증이 생길 수 있습니다. 컴퓨터는 0과 1의 다양한 조합으로 여러 가지 표현을 하는 것입니다. 각기 다른 비트의 조합이 의미하는 것들을 언어로 인식하고 필요한 작업을 진행하는 것입니다.

 

코드는 0과 1로 만든 약속입니다.

0과 1의 비트로 만들어진 약속 부호를 우리는 '코드'라고 부릅니다. 코드의 영어 의미가 암호, 부호, 관례, 법규라는 뜻이 있듯이 우리는 컴퓨터에게 일을 시키기 위해서 이 약속 부호인 코드를 사용해야 하는 것입니다. 그래서 컴퓨터 프로그래밍에서 코드란 서로 간의 규정 또는 약속의 의미가 더해진 약속된 부호로 이해할 수 있습니다.

 

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

 

이와 같은 비트의 나열은 어디까지나 약속이기 때문에, 서로 다른 약속을 따르게 된다면 전혀 다르게 해석할 수 있습니다. 따라서 전달하고 해석할 때 동일한 코드를 사용하는 것이 무엇보다 중요합니다. 사람의 언어를 컴퓨터 언어로 바꾸는 과정을 인코딩, 그 반대의 과정을 디코딩이라고 합니다. 디코딩 오류가 나면 글자가 모두 깨져 보이기도 하고 원하는 결과 값을 얻을 수 없기 때문에 동일한 약속의 언어로 공유하는 것이 가장 중요합니다.

 

컴퓨터는 아스키와 유니코드를 활용하여 언어를 0과 1로 표현합니다. 

8비트(1바이트)로 몇 가지 약속을 할 수 있을까요? '예-예', '예-아니요', '아니요-예', '아니요-아니요' 이렇게 4가지 약속을 정할 수 있습니다. 3비트는 어떨까요? 2비트로 표현할 수 있는 4가지 모든 경우 앞에 '예'로 시작하는 것 한 번, '아니요'로 시작하는 것 한 번을 각각 더하면 3비트 조합의 가짓수가 나옵니다. 즉 8개가 됩니다. 이처럼 1비트가 늘어나면 약속이 가능한 조합의 가짓수는 2배씩 늘어난다는 것을 알 수 있습니다. 정리하자면, 8비트를 2를 8번 곱한 256가지를 약속할 수 있습니다.

 

이러한 약속을 바탕으로 컴퓨터 프로그래밍에서 가장 많이 사용하는 두 가지 코드가 바로 아스키(8비트 단위)와 유니코드(16비트 단위)입니다. 아스키는 미국표준협회에서 만든 코드로 영어 대문자, 영어 소문자, 숫자, 특수문자를 8비트 안에서 약속했습니다. 미국에서 만든 코드이니 당연히 영문자에 대해서만 약속을 정했을 것입니다. 우리가 컴퓨터에서 영문자만 사용한다면 아스키로 충분할 것입니다. 하지만 현실은 그렇지 못합니다. 영문자를 쓰는 나라 외에도 세계 여러 나라의 문자도 표기를 해야 하기 때문입니다. 그래서 유니코드라는 새로운 약속을 만들어 약속 공간을 더 많이 늘렸습니다. 각 나라의 글자와 컴퓨터 비트 언어 간에 약속을 만들 수 있게 컴퓨터 언어를 확장한 것입니다. 유니코드로 공간을 늘릴 때 10비트, 11비트와 같이 1비트씩 늘리지 않고 최소단위인 8비트의 두 배인 16비트를 기본 공간으로 정했습니다. 

유니코드에도 다양한 버전이 있는데, 16비트를 하나의 문자 기준으로 하는 UTF-16이 대표적입니다. 그 외에 32비트 공간으로 확장한 UTF-32도 있습니다. UTF-32는 언어 외에 이모지와 같은 특수기호도 포함된 약속입니다. 예전에는 아스키만 쓰다가 지금은 UTF-16을 대부분 사용하고 있습니다.

 

 

 

 

 

 

 

 

 

 

댓글