개발 메모장

컴파일 언어 vs 인터프리터 언어 본문

Language

컴파일 언어 vs 인터프리터 언어

hugo(박기태) 2024. 9. 19. 19:07

오늘은 컴파일 언어와 인터프리터 언어에 대해 알아보겠습니다. 또한 많이 사용되는 언어들이 어떤 언어인지도 살펴보도록 하겠습니다.


1. 컴파일 언어(Compiled Language)

컴파일 언어는 소스 코드가 실행되기 전에 컴파일러를 통해 기계어로 변환되는 언어입니다. 이 과정에서 전체 소스 코드가 기계어로 변환되며, 변환된 기계어 코드는 특정 운영 체제와 하드웨어에서 직접 실행됩니다.

  • 예시: C, C++, Go
  • 장점:
    • 빠른 성능: 컴파일된 기계어 코드는 직접 실행되기 때문에 성능이 뛰어납니다.
    • 최적화: 컴파일러는 다양한 최적화 기법을 적용하여 성능을 개선할 수 있습니다.
  • 단점:
    • 플랫폼 종속성: 기계어는 특정 운영 체제와 하드웨어에 종속적입니다. 따라서 코드의 이동성과 호환성에 제약이 있을 수 있습니다.

1.1 컴파일러(Complier)

컴파일러는 소스 코드를 기계어 또는 다른 프로그래밍 언어로 변환하는 프로그램입니다. 컴파일 과정은 전체 소스 코드를 분석하고 변환하여 실행 가능한 형식으로 만드는 것을 포함합니다.

2. 인터프리터 언어(Interpreted Language)

인터프리터 언어는 코드가 실행될 때 인터프리터가 소스 코드를 한 줄씩 또는 명령어 단위로 해석하여 실행하는 언어입니다. 전체 소스 코드가 한 번에 변환되지 않고, 실행 중에 해석됩니다.

  • 예시: Python, JavaScript
  • 장점:
    • 플랫폼 독립성: 소스 코드를 직접 해석하므로 플랫폼 간의 호환성이 높습니다.
    • 동적 실행: 런타임에 코드를 수정하고 즉시 실행할 수 있어 개발과 디버깅이 용이합니다.
  • 단점:
    • 느린 성능: 소스 코드를 런타임에 해석하기 때문에 실행 속도가 느릴 수 있습니다.
    • 추가적인 메모리 사용: 인터프리터는 소스 코드를 해석하고 실행하기 위한 추가적인 메모리를 사용할 수 있습니다.

2.1 인터프리터(Interpreter)

인터프리터는 소스 코드를 직접 읽고 해석하여 즉시 실행하는 프로그램입니다. 전체 코드를 미리 변환하지 않고, 필요에 따라 명령어를 해석하고 실행합니다.

3. 컴파일 언어 vs 인터프리터 언어

장점컴파일 언어인터프리터 언어

  컴파일 언어 인터프리터 언어
성능 빠른 성능 느린 성능
플랫폼 독립성 플랫폼 종속적 플랫폼 독립성
메모리 사용 메모리 효율적 추가적인 메모리 사용 가능
디버깅 디버깅이 어려울 수 있음 실시간 디버깅 용이

4. 하이브리드 언어 (Hybrid Language)

하이브리드 언어는 인터프리터 언어의 장점을 유지하면서, 일부 코드를 미리 네이티브 언어로 컴파일하여 성능을 개선하는 언어입니다. 이러한 언어는 실행 중에 필요에 따라 동적으로 최적화된 기계어 코드를 생성하여 성능을 향상시킵니다.

  • 예시: Java, JavaScript
  • 장점:
    • 성능 개선: 자주 실행되는 코드를 미리 컴파일하여 성능을 향상시킵니다.
    • 플랫폼 독립성: 인터프리터 방식으로 플랫폼 독립성을 유지합니다.

4.1 JIT 컴파일러 (Just-In-Time Compiler)

JIT 컴파일러는 런타임에 코드 블록을 기계어로 동적으로 변환하여 성능을 개선하는 컴파일러입니다. 자주 실행되는 코드나 성능을 개선할 필요가 있는 코드만을 변환하여 실행 시 성능을 향상시킵니다.

  • 작동 방식: 실행 중인 코드의 패턴을 분석하고, 반복적으로 실행되는 코드 블록을 네이티브 코드로 변환하여 캐시합니다. 이를 통해 다음 실행 시 성능을 높입니다.

오늘은 컴파일 언어와 인터프리터 언어에 대해 알아보았습니다.

이 글이 컴파일 언어와 컴파일러에 대한 오해를 가지고 계신 분들에게 도움이 되었으면 좋겠습니다.

컴파일 언어에 대한 오해
컴파일 과정이 존재한다고 반드시 컴파일 언어는 아닙니다. 예시로는 바이트 코드로 컴파일되는 Python, Java, JavaScript 등이 있습니다.

컴파일러에 대한 오해
컴파일러가 반드시 기계어로 컴파일하지는 않습니다. 예시로는 바이트 코드로 컴파일하는 Java 컴파일러, JavaScript 코드로 컴파일하는 TS 컴파일러 등이 있습니다.

참고자료

[위키백과] 컴파일 언어

[위키백과] 인터프리터 언어