비전공자도 이해하는 컴퓨터 프로그래밍 원리
동영상으로도 보러오세요 ^0^
1. 프로그래밍이란 무엇일까?
최근 전 세계적으로 급격하게 기술이 발전하면서 프로그래밍에 대한 관심은 계속해서 늘어가고 있는데요. 심지어 요즘은 전공자가 아니더라도 프로그래밍에 대한 기초 정도는 알아야 하는 시대가 점점 다가오고 있습니다. 왜냐하면 최근 만들어지고 있는 거의 모든 기술들이 프로그래밍을 통해 구현되고 있기 때문인데요. 이런 상황이 지속되면서, 이게 어떻게 구현되는지 아는 사람과 모르는 사람의 격차는 계속해서 벌어지고 있습니다.
심지어 요즘은 기업에서도 디자이너인데 프로그래밍을 할 수 있다? 혹은 마케터인데 프로그래밍을 할 수 있다? 라고 하면 정말 많이 우대해 준다고 하는데요. 뿐만 아니라 삼성과 같은 대기업은 생활비까지 지급해주며 프로그래머를 양성하는 프로그램까지 만들었다고 합니다. 이런 시대에 우리는 프로그래밍이 어떻게 구현되는지 그 기초 정도는 알아야 하지 않을까요? 그래서 준비했습니다. 오늘은 이 프로그래밍이라는 게 어떻게 작동되는 건지, 그리고 컴퓨터라는 기계는 어떻게 구현되는 건지에 대해 누구나 알기 쉽게 한 번 설명드리겠습니다.
프로그래밍과 컴퓨터의 원리에 대해 자세히 알아보자.
가장 먼저 프로그래밍이 뭔지에 대해 알아보려고 하는데요. 하버드 대학교 데이비드 말란 교수의 말에 따르면 프로그래밍은 단지 문제를 해결하는 과정이라고 합니다. 그렇다면 문제를 해결한다는 건 무슨 뜻일까요? 문제를 해결한다는 말은 어떠한 입력(input)이 있을 때 그 입력에 대한 올바른 출력(output)을 위해, 답을 찾는 과정을 말하는데요.
예를 들어, 내가 컴퓨터에 전원 버튼을 누르면 컴퓨터가 켜진다는 상황을 가정했을 때, 전원 버튼을 누르는 게 입력(input)이고, 컴퓨터가 켜지는 상황을 출력(output)이라고 볼 수 있는데요. 이렇게 입력을 했을 때 원하는 출력이 나오도록 만드는 과정이 바로 프로그래밍이라는 것입니다. 입력이 문제이고, 출력이 답이고, 이 문제를 풀었을 때 이 답이 나오도록 만드는 게 바로 프로그래밍이라는 것이죠.
- 한 줄 요약 : 입력을 했을 때 원하는 출력이 나오도록 만드는 과정이 프로그래밍이다.
2. 2진법 체계
그렇다면 기계들은 어떻게 입력과 출력을 하게 되는 걸까요? 이걸 알아보기 위해서는 우리는 컴퓨터가 정보를 어떻게 표현하는지에 대해 알아봐야 하는데요. 컴퓨터는 2진법이라는 체계를 통해 정보를 표현한다고 합니다. 만약 2진법이라는 단어를 처음 들어보셨다면 괜찮습니다. 지금부터 제가 차근차근 알려드리겠습니다.
2진법은 단순히 0과 1의 조합입니다. 이걸 알아보기 위해 우리는 10진법에 대해 먼저 짚고 넘어가야 하는데, 우리는 대부분 손을 사용해서 숫자를 세잖아요. 만약 제가 얼마나 많은 분들께서 댓글을 달아주셨는지 세고 싶다면, 한 사람마다 손가락을 하나씩 접어가며 하나, 둘, 셋, 넷 하고 숫자를 셀 텐데요. 이때 우리는 총 열 손가락을 접어가며 숫자를 세게 됩니다. 이처럼 우리는 0부터 9까지의 숫자를 조합해서 우리가 익숙한 모든 숫자들을 표현하고 있고, 이를 10진법이라고 부릅니다.
하지만 컴퓨터 같은 경우에는 그렇게 많은 숫자들을 사용할 수 없다고 합니다. 컴퓨터에는 오직 0과 1밖에 존재하지 않는데, 그럼에도 불구하고 컴퓨터는 다양한 숫자뿐만 아니라, 글자와 사진, 그리고 영상과 소리까지 정말 많은 것들을 표현할 수 있습니다. 그렇다면 대체 어떻게 0과 1만을 사용해서 이런 것들을 만들어낼 수 있는 걸까요?
컴퓨터는 0과 1만을 사용해 숫자, 글자, 사진, 영상, 소리 등을 표현할 수 있다.
이걸 쉽게 설명하기 위해 예를 한 번 들어보겠습니다. 여러분들은 123이 무엇을 의미한다고 생각하시나요? 누가 봐도 123이라는 숫자를 의미하는 것 같아 보이는데요. 근데 왜 우리는 이 화면에 있는 문자를 123이라고 생각하는 걸까요? 자세히 생각해보면 이건 그냥 선을 그어 놓은 것에 불과한데, 우리는 이 문자를 보면 123이라는 숫자를 떠올리게 됩니다.
우리는 자동적으로 가장 오른쪽에 있는 숫자는 1의 자리고, 중간에 있는 숫자는 10의 자리, 그리고 가장 왼쪽에 있는 숫자는 100의 자리라는 것을 알아차렸을 텐데요. 이처럼 우리는 당연하게 여기고 있지만, 알고 보면 본능적으로 이 모든 걸 수학적으로 계산하고 있습니다.
만약 이걸 수학적으로 표현하자면 각각 100 X 1 + 10 X 2 + 1 X 3이고, 결국 100 + 20 + 3이 돼서 123이 되는 것이죠. 여기서 제가 말씀드리고 싶은 건, 우리는 이런 과정을 아주 당연하게 여기고 있지만, 여기에는 분명 어떤 체계가 작동하고 있다는 것입니다. 우리의 조상들이 이렇게 부르자고 약속한 것이고, 이 약속에 따라 모든 사람들이 숫자를 이렇게 읽고 있다는 것이죠.
우리는 자연스럽게 10진법 체계를 받아들이고 있다.
하지만 아까 말씀드렸듯이 컴퓨터의 세계에서는 0부터 9까지 10개의 숫자는 존재하지 않습니다. 컴퓨터에는 0과 1, 두 개의 숫자밖에 없습니다. 그래서 10 대신 2의 거듭제곱을 사용해서 이걸 한 번 알아보려고 하는데, 그러면 가장 오른쪽 열은 1이 되고, 중간 열은 2, 그리고 가장 왼쪽 열은 4가 되는데요. 아까 보았던 10진법과 비교하면 조금 더 이해가 쉬울 것 같습니다.
이렇게 숫자를 계속 늘려가게 되면 10진법과 같이 백, 천, 만 이런 식으로 올라가는 게 아니라, 8, 16, 32 이런 식으로 숫자가 올라가게 되는데요. 그래서 2진법으로 숫자를 표현하자면, 0은 000이고, 1은 001입니다. 그렇다면 2는 어떻게 표현할 수 있을까요? 바로 010입니다. 이게 바로 2진법으로 숫자를 표현하는 방식인데요. 다시 말해 컴퓨터가 2진법으로 말한다는 사실은, 우리가 아는 2라는 숫자를 표현하기 위해 컴퓨터는 010이라는 패턴을 저장한다는 것입니다.
그렇다면 3은 어떻게 표현할까요? 011로 표현합니다. 2+1은 3이니까요. 마찬가지로 숫자 4는 100으로 표현하는데요. 그렇게 숫자를 늘려가면 101는 5, 110은 6, 111은 7이 될 텐데 근데 여기서 8을 나타내고 싶다면 어떻게 해야 할까요? 우리는 더 많은 0과 1을 가져오면 됩니다. 아주 간단하죠? 여기서 하나의 0과 1을 나타내는 공간을 우리는 비트(bit)라고 부르고, 이 비트(bit) 8개가 모이면 하나의 바이트(byte)가 형성이 됩니다.
- 한 줄 요약 : 컴퓨터는 2진법 체계를 활용해 0과 1만을 사용해 정보를 저장한다.
3. 2진법과 프로그래밍
그렇다면 지금까지 배운 2진법이 대체 프로그래밍이랑 어떤 연관성이 있는 걸까요? 우리는 2진법을 통해 컴퓨터의 모든 것들이 0과 1로 작동된다는 걸 알게 되었습니다. 이걸 알아보기 위해 지금까지 2진법을 설명했던 것인데요. 왜냐하면 이게 정말로 중요한 기초 개념이기 때문입니다. 예를 들어, 핸드폰을 충전한다고 한 번 가정해보겠습니다. 그럼 이걸 0과 1로 표현하자면, 0일 때는 충전 안 됨 1일 때는 충전됨. 이런 식으로 간단하게 프로그램을 구현할 수 있습니다.
0과 1만을 가지고 키고 끄는 단순한 프로그램을 구현할 수 있다.
근데 컴퓨터의 경우에는 단순히 키고 끄고의 범위보다는 더 복잡한 일들을 해내고 있는데, 그건 단순히 더 많은 수의 비트를 활용해서 정보를 표현하는 것일 뿐입니다. 그렇다면 수많은 0과 1이 있을 테고, 어떤 건 1이 되고, 어떤 건 0이 되는 것을 조합해 프로그램을 구현하는 것일 텐데요.
이때 0과 1을 변환시켜주는 스위치가 바로 트랜지스터입니다. 트랜지스터는 컴퓨터 속에 있는 아주 작은 스위치고, 컴퓨터는 수백만, 아니 수십억 개의 트랜지스터를 가지고 있는데, 이걸 이용해서 정보를 표현하고 값을 저장하는 것입니다. 이게 바로 지금 컴퓨터 안에서 벌어지고 있는 상황입니다.
수많은 0과 1을 트랜지스터를 통해 조절해 프로그램을 구현시킨다.
그럼 이제 숫자를 넘어 컴퓨터는 어떻게 문자와 메일을 보내고 문서를 작성하는지에 대해 한 번 알아보겠습니다. 지금까지 우리가 알아본 건, 컴퓨터가 수많은 스위치를 조절해 숫자를 표현하고 명령어를 실행할 수 있다는 걸 알아봤는데요. 그렇다면 숫자가 아니라 문자 같은 알파벳은 어떻게 표현할 수 있는 걸까요?
이 모든 것 또한 컴퓨터에서는 0과 1을 사용해 표현합니다. 우리가 이미 약속을 해놨기 때문에 문자를 숫자로 표현할 수 있는 건데요. 예를 들어 A는 1이고, B는 2고, C는 3이야. 이런 식으로 약속을 했기 때문에, 문자나 알파벳도 숫자로 표현할 수 있는 것입니다. 그럼 아마 컴퓨터는 수많은 트랜지스터를 키고 끄면서 A와 B를 표현할 텐데요.
사실 컴퓨터는 A를 1로 표현하지는 않습니다. 우리는 수십 년 전에 대문자 A를 숫자 65로 표현하기로 정했습니다. 따라서 A라는 알파벳을 표현하기 위해서는 각각의 트랜지스터를 키고 끄면서 01000001이라는 숫자를 입력해야 하는데, 다시 말해 여러분이 대문자 A가 들어간 문자나 메일을 받았다면 사실 여러분 01000001을 받는 것이나 마찬가지입니다.
이렇게 우리는 미리 약속된 알파벳에 할당되는 숫자들을 조합해서 문자를 만들어낼 수 있는데요. 단순히 알파벳뿐만 아니라 한글의 자음과 모음, 느낌표와 물음표, 심지어 이모티콘마저도 각각 부여된 숫자들이 있고, 그 숫자들을 2진법의 형식으로 조합하게 되면 스크린상에 해당 문자로 나타나게 되는 것입니다.
알파벳과 한글, 느낌표와 물음표, 심지어 이모티콘마저도 각각 부여된 숫자들이 있다.
문자뿐만 아니라 색깔도 마찬가지로 0과 1로 만들어지는데요. 기본 색상인 RGB(빨강, 초록, 파랑)를 조합해 모든 색상을 만들어내는 것인데, 각각의 색깔 농도가 어느 정도 되는지를 0부터 100까지의 숫자로 입력해 조합한 색상을 스크린에 나타내는 것입니다. 예를 들어, 72만큼의 빨강, 73만큼의 초록, 33만큼의 파랑을 섞으면 노란색이 나오게 되는데, 이처럼 모든 색상도 컴퓨터 세상 속에서는 숫자로 이루어져 있습니다. 그리고 이런 색상들로 만들어진 수백 장의 사진들을 빠르게 재생시키면 동영상이 되는 것이죠.
그렇다면 음악은 어떻게 표현되는 걸까요? 음악도 마찬가지로 숫자로 표현할 수 있는데요. 예를 들어, 음악 같은 경우에도 도는 1, 레는 2와 같이 각각의 음계에 해당하는 숫자를 정해놓은 다음에, 이 음이 얼마나 길게 지속될지, 음량은 얼마나 클지 등을 0부터 100에 해당하는 숫자로 표현한 다음에 이 모든 걸 2진법의 형태로 컴퓨터에 입력하게 되면 컴퓨터에서 음악이 재생되는 것입니다.
음악과 색상 또한 컴퓨터의 세계에서는 0과 1을 조합해 숫자로 표현된다.
결국 제가 드리고 싶은 말씀은 어떤 방법을 사용해서 정보를 나타내든 결국 컴퓨터에서는 0과 1로 표현된다는 것인데요. 이게 바로 프로그래밍의 기초 중의 기초이고, 이걸 알아야 우리는 프로그래밍이 어떻게 구현되는지, 컴퓨터가 어떻게 작동되는지를 이해할 수 있는 것입니다.
- 한 줄 요약 : 컴퓨터의 세계에서는 모든 정보가 0과 1로 이루어진다.
* 참고자료
모두를 위한 컴퓨터 과학 (CS50 2019) - David J. Malan
* 유튜브 : https://youtube.com/마크의지식서재
* 이메일 : marksknowledge@gmail.com