MinChur

프로그래밍 언어의 변환 과정: 컴파일과 인터프리터

|
2 min read

프로그래머가 작성한 소스코드는 사람이 읽기 좋은 '고급 언어'입니다. 하지만 컴퓨터의 뇌인 CPU는 0과 1로 된 '기계어'만을 이해하죠. 우리가 짠 코드가 어떻게 컴퓨터의 명령어로 변하는지 그 과정을 정리해 보았습니다.

1. 고급 언어에서 저급 언어로

  • 고급 언어 (High-level Language): 사람이 이해하기 쉽게 설계된 언어 (C, Python, Java 등)
  • 저급 언어 (Low-level Language): 컴퓨터가 직접 이해하거나, 기계어와 일대일 대응되는 언어
    • 기계어 (Machine Code): 0과 1의 비트 단위로 이루어진 CPU의 직접적인 언어
    • 어셈블리어 (Assembly Language): 기계어를 사람이 읽기 편하게 문자 형태로 바꾼 언어

2. 변환의 두 방식: 컴파일 vs 인터프리트

소스코드를 저급 언어로 바꾸는 방식에는 크게 두 가지가 있습니다.

🔹 컴파일 (Compile)

  • 소스코드 전체를 한꺼번에 저급 언어(목적 코드)로 변환합니다.
  • 변환된 파일을 실행만 하면 되므로 실행 속도가 빠릅니다.
  • 대표 언어: C, C++, Rust

🔹 인터프리트 (Interpret)

  • 소스코드를 한 줄씩 읽어가며 즉시 저급 언어로 변환하고 실행합니다.
  • 코드 수정 후 즉시 결과를 확인할 수 있어 개발 속도가 빠릅니다.
  • 대표 언어: Python, JavaScript

참고: 최근에는 자바(Java)처럼 두 방식을 혼합하여 사용하는 언어도 많기 때문에, 단순히 언어 하나를 하나의 방식으로만 정의하기는 어렵습니다.

3. 실습: 내 코드가 어셈블리어로 변하는 과정

직접 작성한 C언어 코드가 어떤 저급 언어로 변하는지 확인해 볼 수 있습니다.

샘플 코드 (hello.c):

c
#include <stdio.h>

int main() {
    printf("hello world\n");
    return 0;
}

어셈블리어 파일 생성 (GCC 사용):

bash
gcc -S hello.c -o hello.S

이렇게 생성된

text
hello.S
파일을 열어보면, CPU가 실제로 수행하게 될 복잡한 어셈블리 명령어들을 관찰할 수 있습니다.
text
Compiler Explorer(godbolt.org)
같은 사이트를 활용하면 실시간으로 변환되는 모습을 확인할 수도 있습니다.


우리가 무심코 작성하는

text
print
문 하나도 내부적으로는 기계의 언어로 치열하게 번역되는 과정을 거칩니다. 이런 밑바닥의 원리를 이해하는 것은 더 효율적이고 최적화된 코드를 짜는 밑거름이 될 것입니다.