느릿느릿 프로그래밍
[프로그래밍 언어] 컴파일러, 인터프린터 본문
|컴파일러, 인터프린터를 왜 쓰지?
왜냐면 컴퓨터는 이진수만 이해 할 수 있기 때문이다!
100010101과 같은 0과 1의 조합만을 이해한다.
여기서 0과 1을 이해한다는 말은, CPU에 전기가 들어 올 때의 전압의 강도를 의미한다.
전압이 크면 1, 작으면 0으로 보고 이 조합에 따라 다른 명령어를 실행한다는 의미.
이렇게 CPU가 이해 할 수 있는 명령어의 모음을 기계어 셋(instruction set)이라 한다.
요 기계어는 어디서 올까? CPU 회사에서 온다. CPU가 이해할 수 있는 명령어니까..
그래서 회사나 버전 마다 이 기계어가 다를 수 있다.
그런데 우리는 프로그램을 만들 때 우리가 이해할 수 있는 언어로 작성한다.
var name = "sudal";
이런 식으로, 우리가 알아들을 수 있는 영어와 같은 고급언어로 작성한다.
그러나 이건 0과 1의 조합이 아니기 때문에 컴퓨터가 알아들을 수가 없다.
그래서 우리가 고급언어로 작성한 프로그램을 컴퓨터가 알아들을 수 있는 기계어로 번역해주는 친구들이
컴파일러와 인터프린터이다.
이 둘은 고급언어를 기계어로 변환하는 시기에 따른 차이점을 가지는데, 이건 밑에서 보도록 하자.
|컴파일러
컴파일러는 전체 소스 코드를 보고 재구성, 다른 언어로 변환한다.
이 언어는 기계어가 될 수도 있고, 다른 언어가 될 수도 있다.
Java->C 언어로의 번역도 가능하다는 의미이다.
|인터프린터
인터프린터는 한줄씩 번역한다. 고레벨 언어를 중간 코드로 변환, 이거를 행마다 실행해준다 -> 이 중간코드가 다른 프로그램에 의해 실행.
|비교
일반적으로 컴파일러가 실행 시간이 빠르다.
컴파일러는 전체 소스코드 변환 뒤 에러 보고, 인터프린터는 각 행마다 실행하다가 에러 발견되면 이후 코드 보지 않음. 보안적 관점에서는 인터프린터가 도움이 된다.
인터프린터 언어 : 파이썬
컴파일러 언어 : C, C++
하이브리드 언어(컴파일러+인터프리터) : 자바
보통 위와 같이 구분되는데, 요즘은 구현 방식에 따라 같은 언어여도 하이브리드 과정으로 번역되기도 하는 것 같다.
참고
'프로그래밍' 카테고리의 다른 글
[오픈소스] Typescript-eslint에 기여한 후기! (0) | 2020.08.15 |
---|---|
[Git] Git commit이 깨졌을 때, Intellij에서 commit 내역 사라졌을 때 (0) | 2019.10.10 |