프로그램 실행 과정
Program Execution Steps
는 소스코드로 작성한 프로그램을 실행하는 과정을 말한다. 이러한 과정은 언어의 특성에 따라 다르게 나타난다.
컴파일 언어¶
컴파일 언어는 코드가 실행되기 전 컴파일러를 거쳐 기계어로 번역된다. 대표적인 언어로는 C/C++가 있다.
Java 또한 컴파일 언어에 속하나 이번 문서에서는 바이트코드 언어라는 항목으로 분리하여 설명한다.
실행 단계는 보통 Compile Time
, Load Time
, Execution Time
으로 구분한다.
Compile Time¶
프로그램을 실행하기 위해서는 컴퓨터가 읽을 수 있는 코드로 변환하는 과정이 필요하다. 이때 소스코드는 Compiler와 Assembler
등을 사용하여 특정 목적 코드로 변환된다. C/C++의 경우 Proprocessing
과정을 거치기도 한다.
Load Time¶
번역된 기계어는 외부 라이브러리
나 컴포넌트 등을 연동하는 과정을 거치기도 하는데, 여기에 Linker
가 사용된다. 이후 Loader
를 사용하여 필요한 시스템 라이브러리
와 함께 프로그램을 메모리에 로드한다.
Execution Time¶
메모리에 적재된 프로그램은 프로세스로서 실행되며, 동적으로 필요한 라이브러리를 로드한다.
바이트코드 언어¶
바이트코드
는 특정 하드웨어가 아닌 가상머신에서 실행하기 위한 코드를 말한다. 대표적으로 JVM
언어(Java, Kotlin, Scala 등)와 C#
이 있다.
이러한 언어들은 컴파일 언어와 인터프리터 언어의 중간에 속하는 특징을 가지므로 하이브리드 방식이라고 부르기도 한다.
실행단계는 보통 Compile Time
과 Run Time
으로 구분한다.
Compile Time¶
고급 프로그래밍 언어
로 작성된 소스코드를 컴퓨터에서 실행 가능한(Executable)
파일로 만드는 단계이다. 이때 JVM 기반 언어나 C# 등은 소스코드를 바이트코드로 번역한다.
Run Time¶
프로그램이 실행되는 시점이다. 가상머신에서 실행되는 언어들은 이때 JIT 컴파일러
를 사용하여 기계어로 번역된다. 즉, 번역과 실행이 함께 이루어진다.
인터프리터 언어¶
인터프리터 언어는 소스코드를 한 줄씩 읽어 해석하는 방식으로 실행하는 언어이다. 대표적인 언어로는 Python
과 JS(JavaScript)
가 있다.
Run Time¶
인터프리터는 별도의 컴파일 과정 없이 소스코드를 런타임 시점
에 해석한다. 바이트코드 언어가 런타임에 바이트코드를 해석함과 동시에 실행했다면, 인터프리터 언어는 고급 프로그래밍 언어를 바로 해석하고 실행한다.
파이썬 인터프리터는 내장된 컴파일러
를 사용해 바이트코드를 런타임에 생성하고 내장된 가상머신
을 사용하여 실행한다. 이러한 방식을 통해 플랫폼에 독립적으로 소스코드를 실행한다.
참고문헌¶
- Baeldung - Compile Time vs. Load Time vs. Execution Time
- Baeldung - Compiler, Linker, Assembler, and Loader
- Baeldung - Runtime VS. Compile Time
- techvidvan - Python Interpreter
Created : 13 mai 2023