4차 산업혁명 시대를 맞아 우리는 컴퓨터를 통해 활발하게 일상의 불편함을 해결하고 있습니다. 우리가 컴퓨터를 통해 문제를 해결한다는 것은 인간과 컴퓨터가 의사소통을 한다는 것을 의미합니다. 의사가 소통을 하는 데는 언어가 필요한데 컴퓨터와 인간이 사용하는 언어는 다르기 때문에 이를 번역해주는 컴파일러가 필요합니다. 이번 포스트에서는 컴파일러의 필요성에서 대해서 간략히 설명할 것입니다.
많은 사람들은 왜 컴파일러를 사용해야 하는지, 컴파일러가 무슨 일을 하는지 잘 모른 채 컴파일러를 사용해 개발을 하고 있습니다.
인간이 컴퓨터에게 일을 시키려면 컴퓨터와 인간이 서로 이해할 수 있는 공통적인 대화 수단이 필요합니다. 이러한 대화 수단을 언어(language)라고 하는데, 언어는 의사소통을 하는 대상이 누구냐에 따라 자연 언어(natural language)와 형식 언어(formal language)로 나뉘게 됩니다. 자연 언어는 한국어, 영어, 중국, 프랑스어, 일본어 등 인간과 인간이 의사소통을 하는 언어로서 지역이나 민족에 따라 자연 발생적으로 생성된 언어입니다.
반면에 형식 언어는 인간과 기계 사이에 의사소통을 하는 언어로서 인위적으로 만들어진 언어입니다. 이 포스트에서는 컴퓨터와 의사소통과 관련된 내용을 설명할 계획이므로 자연 언어보다는 형식언어에 관심을 중점을 둘 것입니다.
미국 언어학자이자 MIT 공대 교수인 노암 촘스키(Noam Chomsky)는 형식 언어를 4 가지로 분류했는데 그 종류와 관계는 아래의 그림과 같습니다.
형식 언어 중에서 컴퓨터와의 의사소통에 사용되는 언어를 '컴퓨터 언어' 혹은 '프로그래밍 언어(Programming language)'라고 합니다. 프로그래밍 언어는 현실 세계에 존재하는 어떤 문제를 풀기 위한 일련의 과정을 기술하는데 사용하는 것으로 사용 목적, 형태와 기능, 세대 등에 따라 여러 가지로 분류할 수 있습니다. 먼저 형태와 기능에 따라 저급 언어(Low-level langauge)와 고급 언어(High-level language)로 나뉩니다.
저급언어에는 기계어(Machine language)와 어셈블리어(Assembly language) 등이 있습니다. 프로그래밍 언어 중에서 초기에 사용된 언어는 0과 1로 구성된 기계어였습니다. 초기에 기계어를 주로 사용한 이유는 컴퓨터가 0과 1로 만들어진 추상 기계(Abstract machine)이기 때문이었습니다. 그러나 기계어로 프로그래밍을 하는 것은 상당히 어렵고 매우 복잡하다는 단점이 있어 이를 보완하기 위해 나온 언어가 어셈블리어입니다.
어셈블리어는 0과 1로 구성된 기계어 대신 더하기에 ADD, 빼기에는 SUBT 등 대응하는 명령 기호를 사용함으로써 프로그래밍 작업에서 기계어의 단점을 조금 보완했습니다. 하지만 여기서 문제가 발생하게 됩니다. 인간이 어셈블리어를 사용하여 문제를 서술하고 나니 컴퓨터가 이것을 이해하지 못하였습니다. 이해할 수 있는 언어가 달랐기 때문입니다.
이를 쉽게 이해하기 위해 자연 언어를 빗대어 살펴보겠습니다. 예를 들어 프랑스어를 모르는 한국인과, 한국어를 모르는 프랑스인이 서로 만나 인사를 한다고 가정을 해보겠습니다. 서로 말을 알아듣지 못하니 통역사가 필요한데, 이러한 통역사는 아래의 그림과 같이 번역기(Translator)의 역할을 수행하게 됩니다. 앞서 언급한 어셈블리어를 기계어로 번역해주는 번역기는 어셈블러(Assembler)라고 합니다.
그러나 어셈블리어도 저급 언어의 수준을 벗어나지는 못했으며, 그 후 저급 언어의 단점을 보완하기 위해 C,파스칼,알골,포트란,코볼 등 사람 중심의 고급 언어가 나오게 되었습니다. 한편 고급 언어도 저급 언어와 마찬가지로 기계어를 변환해주는 번역기가 필요한데 이를 '컴파일러'라고 합니다.
★ 컴파일러가 필요한 이유는 다음과 같이 정리할 수 있습니다.
인간은 문제를 해결하기 위해 컴퓨터를 사용하며 컴퓨터와 의사소통을 하는데 '언어'가 필요합니다. 컴퓨터는 기계어를 사용하지만 인간이 기계어를 사용하여 문제를 표현하기란 무척 어렵기 때문에 인간은 사람 중심 언어인 고급 언어를 사용합니다. 그런데 인간이 사용하는 고급 언어는 컴퓨터가 이해하지 못합니다. 따라서 인간이 사용하는 고급언어를 기계어로 변환해주는 컴파일러가 필요한 것입니다.
※ 오늘은 '컴파일러는 왜 필요할까?'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 컴파일러 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.
'컴퓨터공학 > 컴파일러' 카테고리의 다른 글
[컴파일러] 프리 프로세서 (0) | 2019.09.29 |
---|---|
[컴파일러] 어셈블러 (0) | 2019.09.29 |
[컴파일러] 번역기의 종류 (0) | 2019.09.29 |