본문 바로가기

프로그래밍 상식

컴파일 VS 인터프리터에 대해 알아보자

면접을 대비하여 여러 가지 기초 상식을 준비하고자 상식 칼럼을 준비했다.


컴파일러

컴파일러는 프로그램 전체를 스캔하여 이를 모두 기계어로 번역한다.

전체를 스캔하기 때문에 대게 컴파일러는 초기 스캔 시간이 오래 걸린다. 하지만 전체 실행시간을 따지고 보면 인터프리터보다 빠르다. 왜냐하면 컴파일러는 초기 스캔을 마치면 실행 파일을 만들어 놓고 다음에 실행할 때 이전에 만들어 놓았던 실행 파일을 실행하기 때문이다. 하지만 단점도 있다. 컴파일러는 고급언어로 작성된 소스를 기계어로 번역하고 이 과정에서 오브젝트 코드라는 걸 만드는데 이 오브젝트 코드를 묶어서 하나의 실행파일로 다시 만드는 링킹이라는 작업을 해야 한다.

컴파일러는 오류 메시지를 생성할 때 전체 코드를 검사한 후에 오류 메시지를 생성한다.

그래서 실행 전에 오류를 발견할 수 있다

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

 

인터프리터 

컴파일러와는 반대로 인터프리터는 프로그램 실행 시 한 번에 한 문장씩 번역한다. 그렇기 때문에 한 번에 전체를 스캔하고 실행파일을 만들어서 실행하는 컴파일러보다 실행시간이 더 걸린다. 그럴 수밖에 없다고 본다. 한 문장 읽고 번역하여 실행시키는 과정을 반복하는 게 만들어 놓은 실행파일을 한번 실행시키는 것보다 빠르기 힘들어 보인다. 하지만 인터프리터는 메모리 효율이 좋다 왜냐하면 컴파일러처럼 목적코드를 만들지도 않고 링킹과정도 거치지 않기 때문이다.

이 때문에 인터프리터는 메모리 사용에 컴파일러 보다 더 효율적인 모습을 보인다. 인터트리터는 오류 메시지 생성과정이 컴파일러와 다르다 인터프리터는 한 번에 번역하기 때문에 프로그램을 실행시키고 한 문장씩 번역될 때 오류를 만나게 되면 바로 프로그램을 중지시킨다. 그래서 실행 후에 오류 발견이 가능하다.

대표적인 언어는 Python , Rubym Javascript 등이 있다.

 

정리

컴파일러 

  • 전체 파일을 스캔하여 한꺼번에 번역한다.
  • 초기 스캔시간이 오래 걸리 짐 나 한번 실행 파일이 만들어지고 나면 빠르다.
  • 기계어 번역과정에서 더 많은 메모리를 사용한다.
  • 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해 주기 때문에 실행 전에 오류를 알 수 있다.
  • 대표적인 언어로는 JAVA, C, C++ 등이 있다.

인터프리터

  • 프로그램 실행 시 한 번에 한 문장씩 번역한다.
  • 한 번에 한 문장씩 번역 후 실행 시키기 때문에 실행 시간이 느리다.
  • 컴파일러와 같은 오브젝트 코드 생성과정이 없기 때문에 메모리 효율이 좋다.
  • 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지시킨다. 실행 후에 오류를 알 수 있다.
  • 대표적인 언어로 Python, Ruby, Javascript 등이 있다.
반응형