컴파일러 언어는 소스 코드를 컴파일한 후, 기계어를 메모리와 CPU를 통해 읽어 실행하는 방식으로 동작하는 언어를 말합니다. 컴파일러 언어는 컴파일 후, 프로세서가 실행할 수 있도록 변환된 기계어 코드를 별도의 파일에 저장합니다. 이렇게 컴파일러 언어는 컴파일 단계과 실행 단계가 분리 되어 있고, 실행에 앞서 컴파일은 단 한번만 수행됩니다. 이러한 특징으로, 실행 시에는 컴파일을 하지 않고 실행만 하면 되므로 코드 실행 속도가 빠르다는 장점이 있습니다.
컴파일러 언어는 컴파일 단계와 실행 단계가 분리 되어 있어, 실행 시에는 컴파일을 하지 않고 실행만 하면 되므로 코드 실행 속도가 빠르다는 장점이 있습니다. 그리고 컴파일 단계에서 에러가 발생한다면 프로그램 실행이 되지 않으므로, 런타임 환경 전에 오류를 수정할 수 있다는 장점이 있습니다. 또한, 컴파일러 언어는 개발자가 메모리 관리 및 CPU 사용과 같은 하드웨어 측면에 대한 더 많은 제어 권한을 가지므로 PC 자원을 효율적으로 관리할 수 있다는 장점이 있습니다.
컴파일러 언어는 코드에 수정이 있을 때마다 빌드 과정을 거쳐야 합니다. 이로 인해, 전체적인 개발 기간이 늘어난다는 단점이 있습니다. 또한, 실행환경에 제약이 있다는 단점이 있습니다. 컴파일러 언어는 컴파일 시 지정된 플랫폼에 최적화되도록 만들어집니다. 때문에 특정 플랫폼에서는 동작하지 않을 수 있고, 다른 플랫폼에서 실행하도록 만들기 위해서는 다시 컴파일 해야 하므로 이 또한 전체적인 개발 기간을 늘어나게 합니다.
인터프리터 언어는 소스 코드를 컴파일 하지 않고, 런타임 환경에 문 단위로 코드를 한 줄씩 읽어서 바로 실행하는 방식으로 동작하는 언어를 말합니다. 빌드 과정을 거치지 않기 때문에, 별도의 실행 파일이 존재하지 않다는 특징이 있습니다. 이로 인해 코드 수정에 용이하다는 장점이 있지만, 인터프리트 단계와 실행 단계가 분리되어 있지 않아 코드가 실행될 때마다 인터프리트 과정이 반복 수행므로 실행 속도가 비교적 느리다는 단점이 있습니다.
인터프리터 언어는 빌드 과정이 없고, 바로 실행이 가능하므로 코드 수정에 용이하고 전체적인 개발 기간이 비교적 적다는 장점이 있습니다. 또한, 플랫폼에 독립적이기 때문에 각 플랫폼에 지원하는 인터프리터만 있다면 실행 가능하다는 장점이 있습니다.
인터프리터 언어는 런타임 환경에서 코드를 해석하고 실행되기 때문에, 프로그램을 실행하기 전에 버그를 발견하기 어렵다는 단점이 있습니다. 이를 보완할 방법은 있지만, 코드의 양이 많아지기 때문에 개발 공수가 늘어난다는 것도 단점이 될 수 있습니다. 또한, 실행 시마다 인터프리트 과정이 반복 수행되므로 실행 속도가 비교적 느리다는 단점이 있습니다.
컴파일러 언어 | 인터프리터 언어 |
코드가 실행되기 전 단계인 컴파일 타임에 소스코드 전체를 한 번에 머신 코드로 변환한 후 실행한다. | 코드가 실행되는 단계인 런타임에 문 단위로 한 줄씩 중간 코드인 바이트코드로 변환한 후 실행한다. |
실행 파일을 생성한다. | 실행 파일을 생성하지 않는다. |
컴파일 단계와 실행 단계가 분리되어 있다. 명시적인 컴파일 단계를 거치고, 명시적으로 실행 파일을 실행한다. | 인터프리트 단계와 실행 단계가 분리되어 있지 않다. 인터프리터는 한 줄씩 바이트코드로 변환하고 즉시 실행한다. |
실행에 앞서 컴파일은 단 한 번 수행된다. | 코드가 실행될 때마다 인터프리트 과정이 반복 수행된다. |
컴파일과 실행 단계가 분리되어 있으므로 코드 실행 속도가 빠르다. | 인터프리트 단계와 실행 단계가 분리되어 있지 않고 반복 수행되므로 코드 실행 속도가 비교적 느리다. |
이 밖에도 컴파일러 언어와 인터프리터 언어는 개발 편의성과 실행 속도, 보안 측면에서 차이가 있습니다.
먼저, 개발 편의성 면에서 컴파일러 언어는 컴파일 단계와 실행 단계가 분리 되어 있어 코드를 수정하면 컴파일을 다시 해야 되므로 번거롭고 전체적인 개발 기간이 늘어난다는 단점이 있습니다. 반면, 인터프리터 언어는 런타임 환경에서 코드를 한 줄씩 변환하고 실행하므로 비교적 개발이 편리하고 개발 기간을 줄일 수 있습니다.
그리고 실행 속도 면에서 컴파일러 언어는 인터프리터 언어보다 빠릅니다. 이미 실행에 앞서 컴파일을 수행했기 때문에 바로 실행이 가능하기 때문입니다. 반면, 인터프리터 언어는 코드가 실행될 때마다 인터프리트 과정이 반복 수행되므로 실행 속도가 느립니다.
대부분의 모던 브라우저에서 사용되는 인터프리터는 전통적인 컴파일러 언어처럼 명시적인 컴파일 단계를 거치지는 않지만 복잡한 과정을 거치며 일부 소스코드를 컴파일하고 실행합니다. 이를 통해 인터프리터 언어의 장점인 동적 기능 지원을 살리면서 실행 속도가 느리다는 단점을 극복합니다. 따라서 현재는 컴파일러와 인터프리터의 기술적 구분이 점차 모호해져 가는 추세입니다.
하지만 자바스크립트는 런타임에 컴파일되며 실행 파일이 생성되지 않고 인터프리터의 도움 없이 실행할 수 없기 때문에 컴파일러 언어라고 할 수 없습니다.
또, 보안 면에서 컴파일러 언어는 기계어로 변환된 코드를 배포하기 때문에 보안상 좋다고 할 수 있습니다. 하지만, 인터프리터 언어는 바이트 코드로 해석되기 때문에 난독화 작업을 하지 않으면 보안상 좋지 않다고 할 수 있습니다.
프로젝트 관리 도구 '지라(Jira)'에 대해 알아보자. (0) | 2023.04.02 |
---|---|
TTL (Time To Live) (0) | 2023.02.16 |
세션스토리지 만료시간 설정 방법 (0) | 2023.02.16 |
Hash Router와 Browser Router의 차이점 (0) | 2023.02.07 |