컴퓨터 개론

Codeit_컴파일러와 인터프리터

AngeRay 2021. 6. 21. 19:36

컴파일러와 인터프리터


다양한 애플리케이션

 

얼마나 다양한 프로그램이 존재하고 있는지 알아보자

가장 먼저 살펴볼 프로그램은 우리가 가장 자주 사용하고 눈에 잘 보이는 애플리케이션 이다.

보통 앱이나 어플이라고 줄여서 우리가 스마트폰에 앱이나 어플을 설치해서 사용한다고 말한다.

애플리케이션의 정의를 내려보자면 프로그램을 만드는 사람이 아닌 실제 사용자

즉, 소비자가 직접 사용하는 프로그램을 애플리케이션이라고 할 수 있다.

제일 마지막 단계라는 관점에서 이런 실제 사용자 혹은 소비자를 엔드유저(End user) 라고도 한다.

시대에 따라서 사용되는 애플리케이션도 계속 변화한다.

요즘은 스마트폰이 컴퓨터와 상당히 유사해지고 있기 때문에 겹치는 부분이 많다.

 

우리가 놓치기 쉬운 애플리케이션들도 있다.

컴퓨터나 스마트폰이 아닌 다른 기계에 있는 애플리케이션 인데

예를 들어 에어컨, 블루투스 스피커, 세탁기 등도 우리가 리모컨 혹은 버튼으로 조작 가능한데

이것도 일종의 간단한 애플리케이션인 것이다.

이렇게 애플리케이션의 범위가 생각보다 넓다.

 

그렇다면 이 애플리케이션들은 어떤 과정을 통해 만들어지는 것일까?

프로그래밍 언어로 코딩을 해서 만들게 된다.

 

하지만 코딩을 하면 영어와 숫자가 섞인, 코드가 만들어지는데

어떻게 이런 프로그래밍 코드가 실행할 수 있는 애플리케이션으로 바뀌는 것일까?

그것은 바로 어떤 소프트웨어가 이 프로그래밍 코드를 실행할 수 있는 애플리케이션으로 바꿔주기 때문에 가능한 것이다.

이렇게 애플리케이션을 만들어 주는 소프트웨어는 크게 두 종류로 나눌수 있는데 바로 컴파일러와 인터프리터 이다.

 

정리하면, 컴파일러와 인터프리터가 프로그래밍 코드를 실제 동작하는 프로그램으로 바꿔 주는 것이다.

 

프로그래밍 언의 번역기, 컴파일러(Compiler)

 

프로그래밍 언어는 매우 다양하다.

하지만 이 중에서 컴퓨터가 이해하는 언어는 머신코드(기계어) 뿐이다.

그래서 보통은 사람이 작성하기 쉬운 고수준 프로그래밍 언어를 컴퓨터가 실행할 수 있는 기계어로 번역해야 한다.

한 언어의 코드를 다른 언어의 코드로 바꿔 주는 것을 컴파일러 라고 부른다.

컴파일러를 쉽게 생각하면 프로그래밍 언어의 번역기인 것이다.

사람의 언어를 컴퓨터 언어로 바꾸는 작업도 간단하지 않다.

하지만 고맙게도 뛰어난 프로그래머들이 이런 컴파일러를 미리 만들어두었고 우린 이걸 사용하기만 하면 된다.

이런 식으로 고수준 프로그래밍 언어를 머신코드로 바꿔주면 컴퓨터가 이해하고 실행할 수 있게 된다.

 

코드잇_강의이미지

 

이제 현재 고급 언어가 아니라 머신코드만 사람들의 컴퓨터에 보내 주면

사람들의 컴퓨터가 이 머신코드를 이해하고 실행해서 프로그램이 동작하는 것이다.

컴파일러 방식에서는 받는 사람의 컴퓨터에서 바로 실행할 수 있는 프로그램을 번역해서 전달해 주면 됐었다. 

즉 이미 번역된 머신 코드를 주는 것이다.

그리고 전달받은 컴퓨터는 이걸 실행만 하면 된다.

 

컴파일러의 단점

 

머신코드를 사람들이 이해할 수 없다는 것이다.

따라서 이 머신코드 중에서 원하는 일부만 수정할 수가 없다.

그래서 기능을 조금 수정하려 해도 고급언어를 수정해서 다시 컴파일러를 통해 컴파일 해줘야 한다.

사실 이 문제는 프로그래머들이 개발을 할 때 더 커진다.

프로그래머들은 이 긴 코드를 한 번만에 쭉 작성하지 않는다.

조금 작성해 보고 잘 되는지 실행해 보고 잘못된 부분이 있으면 조금 고쳐서 다시 실행해 보고

이런 방식으로 코드를 만들어 나간다.

즉 확인하고 싶을 때 마다 계속 컴파일을 해 줘야 한다.

게다가 컴파일 과정에는 시간이 소요된다.

 

코드잇_강의이미지_컴파일러의 단점

 

컴파일러는 좋은 프로그램 실행 방식이지만 빠르게 개발할 수 없다는 단점이 있다.

 

실시간 코드 실행기, 인터프리터(Interpreter)

 

컴파일러를 사용하면 매번 컴파일을 다시 해야 하는 어려움이 있었다.

컴파일러는 프로그램 전체를 한 번에 번역한 후 완성된 컴퓨터 언어로 만들어 주는 역할은 한다.

반면, 인터프리터는 한 줄씩 즉흥적으로 실행해 주는 프로그램 이다.

코드 번역기가 아니라 코드 실행기인 셈이다.

인터프리터는 코드를 한 줄씩 즉시 실행하기 때문에 코드를 고치고 나서 컴파일 등의 과정 없이도 바로 결과를 확인할 수 있다.

결과적으로는 개발 속도가 더 빨라진다.

 

인터프리터를 사용할 경우 코드는 어떻게 실행될까?

 

인터프리터를 사용하게 되면 실행할 수 있는 프로그램으로 만들어서 주는 게 아니라 프로그래밍 코드 자체를 보내주게 된다.

사용자의 컴퓨터에서 코드를 기계어로 바꾸는 번역과정을 실기간으로 거치게 된다.

때문에 사용자의 컴퓨터에서 코드를 실행할 수 있는 코드 실행기 

즉, 인터프리터를 가지고 있어야 된다.

 

코드잇_강의이미지_인터프리터 원리

 

사용자 컴퓨터에 인터프리터를 가지고 있어야 되기에

보통은 컴파일러 방식에 비해 실행 속도가 더 떨어지게 된다.

또 프로그래밍 코드가 그래도 전달되기 때문에 코드가 유출될 위험성도 있다.

 

보통은 고급언어에서 점점 더 저수준 언어로 번역될수록 코드 길이가 훨씬 길어진다.

그래서 전체 프로그램을 머신코드로 만들어서 전달하는 컴파일러 방식보다는

고수준 언어 그 자체로 전달하는 인터프리터 방식의 프로그램 용량이 더 작다.

 

컴파일러 VS 인터프리터

 

코드잇_강의이미지_컴파일러와 인터프리터의 차이

 

컴파일러는 개발 편의성은 떨어지지만, 실행 속도는 빠르다.

인터프리터는 개발 편의성이 높지만, 실행 속도는 느리다.

 

사실 코드의 실행 방식은, 프로그래밍 언어의 특징과도 연결된다.

저수준 언어는 개발 편의성은 떨어지지만 실행 속도는 빨랐고,

고수준 언어는 개발 편의성은 높지만, 실행 속도는 느렸다.

하나의 장점을 살리기 위해, 다른 것들을 일부러 포기 한것이다.

여기서 동일한 특징이 컴파일러와 인터프리터에서도 각각 나타나고 있는 것이다. 

그래서 언어 마다 주로 쓰이는 실행 방식이 있다.

 

코드잇_강의이미지_컴파일러와 인터프리터의 차이

 

고수준 언어는 개발 편의성이 생명인 언어인데,

컴파일 과정을 매번 거쳐야 한다면,

개발의 편의성 장점을 다 잃어버리기에 파이썬, 루비 같은 고수준 언어는 인터프리터 방식을 주로 사용한다.

 

반면, 저수준 언어는 개발 과정이 좀 힘들어도, 최고의 성능, 효율, 속도를 만들어내고자 했다.

그래서 C, C++ 같은 저수준에 비교적 가까운 언어들은 컴파일 방식으로 실행되는 경우가 많다.