뻘짓 하며 얻은 기본기 4 컴파일러에 대해서
드디어 뭔가 단어 다운 단어가 등장하였다.
컴파일러(compiler) 번역하면 번역기 혹은 해석기 정도로 되는 단어이시겠다. 저번에 필자가 프로그래머는
결국 인간의 언어를 컴퓨터의 언어로 번역하는 번역가라고 했었다. 물론 인간이 매번 번역을 일일이 하면 좋겠지만
도구를 사용할 줄 아는 만류의 영장 아니겠는가. 그래서 번역기라는 것이 있다. 쉽게말해 프로그래밍 언어로 쓰여 있는
문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램이다.
그런데 이상하다. 프로그래밍 언어를 짰다면 바로 컴퓨터가 이해하면 되는건데 왜 프로그래밍 언어로 짰는데 왜 또 다른
프로그래밍 언어로 만들어야 하는가? 그 이유는 언어에도 레벨이 있기 때문이다. 쉽게 말해 고급언어(c, c#, java 등)와 저
수준 언어(어셈블리, 기계어 등)가 따로 있는 것이다. 간단히 생각해보면 이렇다. 인간이 모스부호나 수화로도 소통이
가능 한것은 목적이 다르고 효율성이 다르기 때문이다. 모스부호 (만약 모스부호가 무엇인지 모른다면 구글에 검색해보
기를 추천한다)로도 소통이 가능하지만 "안녕하세요" 라는 것을 모스부호로 소통하려면 말로 하는 것보다 시간적인 노
력이 더 필요할 것이다. 또한 한번에 알아보는 직관성 또한 떨어질 것이다.
고급언어와 저수준 언어 역시 그러하다.
위 언어를 보면 첫번째는 c#의 주적 자바의 코드이다. 그리고 아래는 기계어다. 한눈에 보더라도
자바는 단어의 나열로 보이지만 아래의 코드는 예상조차 어렵게 생겼다. 정말 흉악하게 생기지 않았는가?
인간이 저런 기계어나 어셈블리어를 직접 사용이 가능하긴 하다. 또한 사용하는 경우도 있다.
설명을 안하고 가고 싶지만 하겠다. 왜냐하면 코드가 더 하드웨어 레벨(기계가 이해하기 쉬운)에 가깝기
때문이다. 달리 말하면 기계에 친화적인 언어이기 때문이다. 기계가 알아듣기 쉽게 언어가 0,1 로
변경되어야 하는데 아래의 저수준 언어들은
더욱 0,1로 변경 되기 쉽게 되어있고(대신 인간이 이해하기 힘듦) 고급언어는 인간이
이해하기 쉽게 되어있기 때문에 변경되기 복잡하다.
따라서 느리다! 기계어나 어셈블리 어는 기계어 알아 듣기 좀더 편하게 작성되어 있기에 더 빠른 장점이 있다.
그래서 직접 사용하는 경우가 존재한다. 그래서 하드웨어 레벨에 가깝다는 것이다(기계에 가깝다).
아무튼 이런 고오급 언어는 우리 기계님께서 이해하기 어려움으로 친히 어셈블리어로 한번 번역을 해주어야
하고 그런뒤 다시 cpu가 바로 이해하기 쉬운 기계어로 변환해주어야 하는 것이다.
(어셈블리어:기계어를 알파벳으로 변환한 것)
이런 고오급 언어를 어셈블리어로 변환해주는 것이 컴파일러 라는 것이다.
오늘의 정리: 컴파일러는 프로그래밍 언어로 쓰여 있는
문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램이다.