본문 바로가기

컴퓨터공학 기초

컴파일이란 무엇인가

컴퓨터는 내가 직접하기 복잡한 연산을 대신해주는 편리한 도구이다. 그러나 컴퓨터는 스스로 움직이지 않는다. 내가 명령을 내려야 컴퓨터는 움직인다. 이때, 문제가 발생하는데, 컴퓨터와 내가 사용하는 언어가 다른 것이다. 언어가 다르면 서로의 생각을 전달할 수 없다. 컴퓨터는 0과 1로 이루어진 이진수로 의사소통을 한다. 인간이 이것을 이해하기는 쉬운일이 아니다. 컴퓨터에게 명령을 내려서 내가 원하는 작업을 하도록 컴퓨터와 소통을 해야하는데, 서로 소통의 언어가 다른 것이다. 이것을 위해서 만들어진 것이 컴파일이다. 

 

컴파일은 쉽게 말하자면, 번역하는 행위라고 생각하면된다. 소스코드란 인간의 언어로 작성한 코드를 말한다. 인간이 기계에게 내리고 싶은 명령을 소스코드 형식으로 작성한 것이다. 그리고 작성된 이 소스코드를 컴파일러기계어형태로 번역을 해준다. 그리고 번역된 기계어를 기계가 받아들여서 수행을 하는 것이다. 아래와 같은 형식으로 의사소통이 이루어진다. 

 

소스코드(인간의 언어) -> 컴파일(기계어로 번역) -> 기계어 -> 수행 

 

초창기 컴퓨터시대에는 사람들이 기계어를 공부했었다고 한다. 그래서 이진수로 표현하면서 기계와 소통을 하고, 명령을 하달했었지만, 이해하기가 쉬운일이 아니었기에, 점차 소통의 방식이 발전하게 된 것이다. 그렇게 탄생하게 된 것이 어셈블리어였다.어셈블리어란 간단하게 말하자면, 기계어와 1대1로 대응하는 방식의 소통 언어를 지정해둔 것이다. 그런데, 이 어셈블리어도 그렇게 이해하기가 쉬운 것이 아니었다. 점차로 컴퓨터와의 소통방식이 발전하여, 지금 우리가 사용하는 C,C++와 같은 언어들이 탄생하게 된 것이다. 이런 프로그래밍언어들은 컴파일러를 포함하고 있어, 우리가 소스코드를 작성하면 알아서 컴파일(번역)을 해주고 기계에서 명령을 전달해준다. 

 

아, 글을 작성하다보니, 신의 탑이 생각난다. 신의 탑의 세계관에는 외부에는 외부세계에서 사용하는 언어가 있고, 내부의 언어가 있다. 그래서 외부 언어로 말하면, 내부인들은 알아듣지 못한다. 이것을 위해 존재하는 것이 포켓이라는 구슬이다. 이 포켓을 거쳐서 이야기를 하면, 내가 외부언어로 말해도, 포켓이 알아서 내부 언어로 번역을 해주는 것이다. 아래의 사진은 주인공 '밤'과 '유리'라는 인물이 접선을 한 상황이다. 밤은 외부인물이고, 유리는 내부인물이기에 서로 다른 언어를 사용하고 있었다. 그런데 포켓을 거치니 서로 대화를 나눌 수 있게 된 것이다. 

 

신의 탑 포켓사진

나는 이 포켓의 역할을 하는 것이 컴파일러가 아닐까하고 생각한다. 우리가 소스코드라는 인간의 언어로 말하면, 컴파일러가 기계어로 알아서 번역을 해주는 것이다. 참 고마운 녀석들이다.