컴파일 (Compile)
프로그래밍 언어를 Runtime 이전에 기계어로 해석하는 작업 방식.
(원래 소스를 원시코드, 바뀐 코드를 목적코드(Object Code)라고 한다.)
- 런타임 이전에 Assembly 언어로 변환하기에 구동 시간이 오래 걸리지만, 구동된 후 하나의 패키지로 매우 빠르게 작동.
구동 시, 시스템으로부터 코드와 메모리를 할당 받으며 사용.
- 런타임 이전에 해석을 마치고 컴파일 결과물이 기계어로 전환되기에 OS 및 빌드 환경에 종속적.
그러므로, OS 환경에 맞게 호환되는 라이브러리와 빌드 환경을 구분해서 구축.
- Compile 언어로, C / C++ 같은 언어와 Java도 Byte Code로 바꾸기 위한 과정에서 컴파일을 수행.
인터프리터 (Interpreter)
프로그래밍 언어를 Runtime 이후에 Row 단위로 해석(Interpret)하여 프로그램을 구동시키는 방식
- 프로그래밍 언어를 기계어로 바꾸지 않고 중단 단계를 거친 뒤, 런타임에 즉시 해석하기에
바로 컴팩트한 패키지 형태로 Binary 파일을 뽑아 낼 수 있는 Compile 방식에 비해 낮은 퍼포먼스를 보임.
- 런타임에 직접 코드를 구동시키는 특징이기에 실행시간은 느리며, 런타임에 실시간 Debugging 및 코드 수정이 가능.
- 메모리를 필요할 때 마다 할당하여 사용. 이와 관련되어 코드의 흐름 자체도 실제 필요할 때, 실제 수행되어야 하는 시점에 수행되기에 덕타이핑(Duck Typing)이 가능한 측면이 있으나, 반대로 정적 분석이 되지않는 Trade off를 갖고 있음.
- Interpreter 언어로, JavaScript 와 같은 스크립팅 언어들과 컴파일 이후 동작에서 Interpret을 수행하는 언어들도 존재
- 해당 방식으로 OS 및 플랫폼에 종속되지않은 프로그램 구동이 가능.
(이러한 특징을 지닌 Interpreter는 Java의 JVM 과 Python 의 Analzer가 있음.)
| 형변환 및 예제 (0) | 2022.06.30 |
|---|---|
| 연산자 (Arithmetic, Assignment, String, Comparison, Logical) (0) | 2022.06.28 |
| 변수 Variable / 출력 (0) | 2022.06.28 |
| 주석문, alert() (0) | 2022.06.28 |
| JavaScript 개념 / 불켜기 불끄기 (0) | 2022.06.28 |