반응형

컴파일러 (Compiler) 와 인터프리터 (Interpreter)

 

컴파일 (Compile)

컴파일에 대해 알아보기 전에 어셈블리어에 대해 간단히 알아두면 좋다. 
어셈블리어란, 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르다. 모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행하지만, 기능을 어떤 과정을 거쳐 수행할지는 다를 수 있으며, 이런 차이는 어셈블리어에 반영되게 된다. (출처 : 위키)

 

새로운 아키텍처가 적용된 CPU가 나올 때마다 매번 동일한 프로그램을 새로운 CPU에 맞춰 어셈블리어로 다시 작성해야하는 문제점이 있다. 이러한 이유로 통일된 언어체계의 필요성이 대두되었고, 바로 여기서 고급 프로그래밍 언어가 나오게 된다. 알다시피 컴퓨터는 고급언어로 작성된 코드를 바로 인식할 수 없기 때문에 번역해주는 과정이 필요하고 이것이 컴파일(Compile)이다. 

 

번역하는 방식에는 컴파일러 방식과 인터프리터 방식이 있다.

 

컴파일러 (Compiler)

컴파일러는 프로그램 전체를 스캔해서 모두 기계어로 번역한다. 전체를 스캔하기 때문에 컴파일러는 초기 스캔이 오래걸린다. 하지만 전체 실행시간을 보면 인터프리터 보다 빠르다. 컴파일러는 초기 스캔을 마치고 나면 실행파일을 만들어두고 다음에 실행할 때 이전에 만든 실행파일을 실행하기 때문이다. 
장점이 있다면 단점도 있을 것이다. 컴파일러의 단점은 고급언어로 작성된 소스를 기계어로 번역하는 과정에서 오브젝트 코드 (Object Code) 라는 파일을 생성하는데, 이것을 묶어 하나의 실행파일로 다시 만드는 작업인 링킹 (Linking)을 수행한다. 
이 때문에 컴파일러는 통상적으로 인터프리터보다 많은 메모리를 사용한다. 
컴파일러가 오류메시지를 생성할 때에는 전체 코드를 검사한 후, 오류 메시지를 생성하기 때문에 실행 전에 오류를 발견할 수 있다. 대표적인 언어로는 C, C++, Java 등이 있다. 

컴파일러 작동 방식

 

인터프리터 (Interpreter)

인터프리터는 프로그램 실행시 한 번에 한 문장을 번역한다. 한번에 전체를 스캔하고 번역하는 컴파일러보다 실행시간이 더 걸릴 수밖에 없다. 하지만 인터프리터는 메모리 효율이 좋다. 컴파일러처럼 목적 코드(오브젝트 코드)를 만들지 않고 링킹(Linking)의 과정도 거치지 않기 때문이다. 그렇기 때문에 인터프리터는 메모리 효율이 좋다. 
오류메시지도 컴파일러와 다르다. 인터프리터는 한 번에 한 문장을 번역하기 때문에 프로그램을 실행한 후, 한 문장씩 번역될 때 오류가 발생되면 프로그램을 바로 중지한다. 그렇기 때문에 프로그램을 실행해야 오류 발견이 가능하다.
대표적인 언어로는 Python, Ruby, Javascript 등이 있다. 

인터프리터 작동 방식

정리

  컴파일러 (Compiler) 인터프리터 (Interpreter)
실행 속도 빠르다 느리다
개발 코드를 수정하고 실행시 컴파일을 다시 한다 코드 수정하고 즉시 실행할 수 있다
출력물 목적 코드 즉시 실행
언어 종류 C, C++, Java 등 Python, Ruby, Javascript 등


 

참고
https://www.guru99.com/difference-compiler-vs-interpreter.html

https://nuritech.tistory.com/2

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기