컴퓨터는 사람이 작성한 프로그래밍언어를 그대로 사용할 수 없다
왜냐하면 컴퓨터는 0과 1로 작성 된 언어를 사용하기 때문이다
그렇기 때문에 사람이 사용하는 언어를 컴퓨터가 읽을 수 있는 언어로 번역하는 과정이 필요한데
컴파일러와 인터프리터는 사람이 작성한 프로그래밍 언어를 기계어로 변환해주는 번역기 역할을 한다
사람이 사용하는 언어 > 고급언어 (프로그래밍 언어)
고급언어의 종류 : C, C++, JAVA, JavaScript 등등..
컴퓨터가 사용하는 언어 > 저급언어 (0 또는 1)
저급언어의 종류 : 어셈블리어, 기계어
컴파일러와 인터프리터 모두 번역을 하지만 번역을 하는 방식에서
차이가 있기 때문에 어떻게 차이가 있는지 확인해보자
작성한 코드를 컴퓨터로 실행 가능한 코드로 컴파일 뒤 실행파일을 생성시킨다
컴파일 도중 컴파일러는 이러한 코드의 명령을 어떤 순서에 맞게 프로세서에 전달해야 하는지
결정을 하게 되며 효율적이게 최적화시킨다
또한 또 다른 명령을 기다릴 필요가 없다면 프로세서는 이러한 명령을 병렬로 처리하게 된다
장점
한번에 컴파일러를 실행하여 처음에는 속도가 느리지만 컴파일을 마친 파일은 더 빨라지게 된다
규모가 크거나 코드 자체가 긴 경우에는 효과적이다
컴파일 후 생성 된 코드는 더 효과적이고 최적화가 되어있다
단점
컴파일 된 파일은 Windows, Mac, Linux와 같이 OS에 의존적이다
ex) Window에서 컴파일한 파일을 Mac에서 실행하려면 Mac OS에 맞게 다시 컴파일 해야한다
개발 및 버그 fix 과정에서 신경을 써야한다
ex) 코드가 바뀌거나 수정 된다면 다시 컴파일을 해줘야 한다
컴파일을 사용하는 언어 종류
C, C++, Pascal, Delphi, Modula, COBOL, Fortran 등등..
실시간으로 코드를 읽고 컴퓨터에게 전달해준다
한번에 모든 코드를 전달하는 것이 아닌 한줄 씩 번역하여 프로세서에게 전달, 실행 된다
작업은 코드가 끝날 때 까지 실행되고 작업 중 에러를 만나게 되면 곧바로 중지하여 에러를 표시한다
개발자는 어떤 부분에서 에러가 발생했는지 빠르게 파악하여 대처할 수 있다
인터프리터는 추가로 실행파일을 생성하지 않는다
그렇기 때문에 인터프리터는 따로 기계어로 변환하지 않는다
프로그래밍 언어와 기계 사이에 중재자 역할을 한다
인터프리터는 실시간으로 코드를 한 줄씩 읽고 분석한 뒤 상응하는
루틴을 인터프리터 자신의 Libaray를 통해 프로세서가 원하는 행동을 수행한다
장점
실시간으로 한 줄씩 코드를 읽고 프로세서에게 전달하기 때문에 에러 발생시 즉각 표시한다
그렇기 때문에 개발자는 빠르게 에러를 수정할 수 있다
단점
실시간으로 한 줄씩 코드를 읽기때문에 빠르게 보일 수 있으나 결과적으로 컴파일러보다 느리다
읽는도중 코드가 변경되면 처음부터 다시 순서대로 읽기때문에 비효율 적이다
인터프리터를 사용하는 언어 종류
JavaScript, PHP, Python, LISP, Perl 등등..
C#, Java는 JIT(Just-inTime) 컴파일러를 사용
JIT(Just-inTime) 컴파일러 : 컴파일러 + 인터프리터가 결합 된 하이브리드 컴파일러
참고