안녕하세요 개발자 베베입니다.
이 글에서는 프로그래밍 언어의 정의와 종류에 대해 알아보도록 하겠습니다.
프로그래밍 언어
프로그래밍 언어란, 프로그램을 정의하는 데에 사용되는 언어를 뜻합니다. 이 말이 바로 이해가 되시는 분들이 있는 반면에 이해가 잘 안되시는 분들도 계시겠죠. 이것을 이해하려면 먼저 프로그램의 정의부터 이해해야 합니다.
사전에 프로그램의 정의를 찾아보면 다음과 같이 써져 있습니다.
- 프로그램(Program) : 어떤 문제를 해결하기 위해 처리 방법과 순서를 기술한 일련의 명령어 집합체
즉, 프로그램이란 문제 해결을 위해 작성된 명령어들이라는 것입니다. 그렇다면 이 명령어는 누구에게 명령을 내리기 위해 쓰여진 것일까요? 바로 컴퓨터입니다.
우리는 어떠한 결과값을 얻기 위해 그 결과값을 도출하는 프로그램을 작성하고, 이것을 컴퓨터에게 의뢰합니다. 그런데 컴퓨터에게 의뢰를 할 때 문제가 발생합니다.
명령어?
컴퓨터는 인간의 언어를 이해하지 못합니다. 때문에 컴퓨터에게 명령을 하기 위해서는 컴퓨터가 이해할 수 있는 언어로 명령어를 작성해주어야만 합니다. 이 언어가 이 글에서 소개하는 프로그래밍 언어이며, 컴퓨터는 프로그래밍 언어를 해독하여 명령을 수행하게 됩니다.
프로그래밍 언어의 분류
프로그래밍 언어는 인간 친화도 기준으로 크게 3가지로 나눌 수 있습니다.
- 기계어
- 어셈블리어
- 고급언어
하나씩 무엇인지 살펴보도록 하겠습니다.
기계어
일단 컴퓨터에게 명령을 하려면 명령을 처리하는 부품인 CPU가 명령어를 해독해야만 합니다. 이 CPU란 녀석은 이진수 데이터를 다룰 수 있는 능력을 가지고 있어서 이진수로 이루어진 명령어를 해독할 수가 있죠.
이 때, 이진수로 이루어진 명령어란 아래처럼 1과 0으로 이루어진 형태입니다.
10101011 10101011 10101011 11010101 <- 기계어
이 일련의 숫자들은 우리가 보기엔 아무 의미가 없어보이지만 cpu에게는 특정 명령어의 의미를 갖게 됩니다. 예를 들면 숫자 1과 1을 더하라라는 명령어일 수도 있는거죠.
이처럼 컴퓨터가 바로바로 해석할 수 있는 이진수로 된 명령어를 보며 우리는 기계어이다! 라고 말할 수가 있습니다. 기계어란 즉, 숫자로 이루어진 컴퓨터가 이해할 수 있는 언어이죠.
어셈블리어
기계어는 숫자로 이루어져 있어서 이해하기 불가능한건 아니지만 인간 입장에선 쉽지 않습니다. 때문에 기계어로 작성된 명령어를 인간의 언어인 영어로 대응시켜주게 되었는데, 이것이 바로 어셈블리어입니다.
일단 10101011 10101011 10101011 11010101 라고 적고, 이 명령어는 ADD라고 부르자고 약속한것이죠.
기계어 : 10101011 10101011 10101011 11010101
어셈블리어 : ADD
어셈블리어의 등장으로 인해 명령어를 작성하는 일이 매우 쉬워졌습니다. 그 전에는 수 많은 이진수를 보며 명령어를 작성했겠지만 이제는 영어를 쓸 수 있으니깐요.
고급언어
프로그래머들은 크고 복잡한 문제를 컴퓨터에게 맡기려고 하니 고민에 빠지게 됩니다. 어셈블리어를 사용해도 그 규모가 방대했기 때문이죠.
이 문제를 해결하기 위해 고급 언어가 탄생하였습니다. 어셈블리어는 고작해야 기계어를 영어로 번역한 수준에 불과하다면, 고급 언어는 좀 더 인간 친화적이기 때문이죠.
예를 들어 X라는 값과 Y라는 값을 더하기 위해서 어셈블리어는 다음과 같은 코드를 작성해야만 했습니다.
MOVE X
MOVE Y
ADD X Y
해석하면 X를 cpu에 넣고, Y를 cpu에 넣어서, X와 Y를 더한다. 가 되겠네요.
고급언어는 위 과정을 다음과 같이 작성합니다.
X + Y
고급 언어가 개발되어 진입장벽이 낮아지면서, 전세계적으로 많은 사람들이 프로그래밍을 할 수 있게 되었으며 지금과 같이 프로그래밍 산업이 발전할 수 있게 됩니다.
컴파일
결론적으로 우리는 고급 언어로 프로그램을 작성합니다. 그런데 고급 언어는 컴퓨터가 이해할 수 있는 기계어가 아닌 영어의 형태를 갖고 있습니다. 때문에 고급언어를 기계어로 번역하는 과정이 필요한데 이 과정을 컴파일이라고 부릅니다.
컴파일 과정은 매우 간단합니다. 고급 언어를 먼저 어셈블리어로 변환하고 그 다음 어셈블리어를 기계어로 변환하게 됩니다. 이 과정은 컴파일러라는 프로그램이 전담하며 여러분은 고급 언어로 프로그램을 작성하는 데에만 집중하면 됩니다.