컴파일과 런타임, 그리고 인터프리터

지드루·2022년 6월 11일
1

CS 등

목록 보기
3/8

컴파일? 런타임?

흔히들 말하는 말이지만 은근 헷갈리고 정확하게 알지못하는것 같아 이 기회에 한 번 정리해 보려고 한다.

컴파일, 그리고 컴파일언어

컴파일은 C나 JAVA등의 개발 언어로 작성된 소스코드를 컴퓨터가 인식할 수 있는 기계어 코드로 변환하는 것을 의미한다. 이러한 일련의 과정을 컴파일타임이라고 부르기도 한다. 그리고 이러한 과정을 실행시켜주는 것을 컴파일러라고 하는 것이다.

이렇게 단순히 말하면 기억하기 힘들 수 있으니 간단히 생각해보자. 컴파일(Compile)이란 단어는 단순히 엮다, 편집하다의 뜻을 가진 영단어이다. 즉, 기존의 소스코드를 다른 언어로 바꿔주는 일종의 번역과정인 셈이다. 때문에 어떤 언어를 다른 언어로 바꿔준다면 그것을 컴파일러라고 말할 수 있는 것이다.

이러한 컴파일과정을 거치는 언어들은 컴파일 단계와 실행 단계가 분리되어 있으며, 컴파일은 단 한번만 수행된다. (실행프로그램을 만드는 것은 링커가 수행한다. 다시말해 컴파일->링킹 과정을 통해 실행파일이 생성된다.) 컴파일 단계와 실행 단계가 분리되어 있기 때문에 실행자체의 속도는 빠른편이라고 할 수 있다. 단, 프로그램이 바뀌면 작은변화라도 그때마다 다시 컴파일을 해주어야 한다는 단점이 있다.

대표적인 컴파일언어로는 C,C++,C#,JAVA 등이 있다.

런타임

런타임은 컴파일과정을 마친 프로그램이 실행되어 동작하는 실행환경을 말한다. 단어 그대로의 뜻이라고 보면 된다. Javascript로 짠 코드를 브라우저내부에서 실행하고 있다면, 런타임은 브라우저가 되는 것이다.

컴파일타임에러와 런타임에러

이미 앞서 살펴본 단어의 뜻을 기준으로 한번 살펴보자.

컴파일타임에러라고 하면, 컴파일을 하는 과정에서 문제가 생겼다고 볼 수 있다. 한마디로 번역이 안된다는 뜻이다. 그렇다면 어떤 문제가 생긴것일까?

컴파일러에는 문제가 없다고 가정해보자. 그렇다면 다른 언어로 바꿀 수 없는것은 번역할 소스코드가 잘못 적힌 경우일 것이다. 그렇다! 우리가 흔히 겪을 수 있는 Syntax ErrorType Check Error가 바로 컴파일타임에러의 대표적인 예시이다.

그렇다면 런타임에러는 어떤 경우일까? 단어를 보고 생각하면 실행프로그램까지는 완성되었지만, 실행하는 과정에서 문제가 생긴것으로 보인다. 즉, 소스코드를 해석하는 것 자체는 가능했지만, 실행할 수는 없는 상황인 것이다. 대표적인 예시를 보면 바로 이해가 갈 것이다.
런타임에러의 예시로는 Divide By Zero Error잘못된 배열참조에러, 메모리 부족에러등이 있다.

인터프리터

지금까지 일반적으로 쓰이는 컴파일과 런타임의 정의에 대해 알아보았다. 그리고 컴파일과정을 거치는 언어의 단점도 확인했다. 간단하고 자주바뀌는 프로그램을 작성해야하는 상황이라면 컴파일언어는 꽤 불편할 것이다. 코드의 크기가 커질수록 단순한 변화라도 컴파일과정은 시간이 길게 소요될 것이니 말이다. 이를 위해 나온것이 인터프리터이다.

인터프리터(Interpreter)의 사전적의미는 통역가이다. 우리는 가끔 TV나 유튜브등을 통해 통역가들이 일하는 모습을 본 적이 있다. 통역가들은 누군가가 말을하면, 그것을 듣고 즉각 번역하여 알려주곤한다. 다음 말을 한다면 통역가는 또 번역해서 알려줄 것이다.

인터프리터는 코드를 한 줄씩 읽어 내려가며 실행하는 프로그램이다. 통역가 그 자체인 것이다. 때문에 컴파일과정을 거치는 것이 아니라, 실행단계인 런타임에 코드를 한줄씩 변환 후 실행하게 된다. 컴파일과정 자체가 없고 매 실행마다 인터프리트 단계를 거치게 된다. 때문에 실행시간 자체는 컴파일언어에 비해 느려지게 되었다. 그럼에도 프로그램 수정이 간단해진다는 큰 장점때문에 Javascript,Python,Ruby등 다양한 언어들이 애용하는 방식이다.

0개의 댓글