無테고리 인생살이

[OS] 컴파일러 VS 인터프리터 본문

OS

[OS] 컴파일러 VS 인터프리터

無격 2022. 12. 1. 18:38

 

 

개발자는 일반적으로 high level language를 사용해서 컴퓨터 프로그래밍을 합니다. high-level language란 인간이 이해할 수 있는 인간친화적 언어이고, 이 고수준 언어로 작성된 코드를 소스코드(source code)라고 합니다.

 

기계는 high-level language로 작성된 소스코드를 읽을 수 없습니다. 즉, 컴퓨터 CPU는 0,1로 이루어진 바이너리 형태의 기계어(machine code)만 읽을 수 있습니다.

 

그러므로,

작성한 소스코드를 CPU가 이해할 수 있는 기계어로 바꿔줘야 합니다. 컴파일러와 인터프리터는 소스코드를 기계어로 변환해주는 언어변환 프로그램이라고 생각하면 이해가 쉬울 것입니다. 

 

 

컴파일러와 인터프리터의 차이점을 여러 관점에서 살펴보겠습니다.

1. 실행 방식 (기계어로 변환되는 시점)

  • 컴파일러는 프로그램 실행 전, 소스코드 전체를 기계어로 한 번에 변환 후,  실행
  • 인터프리터는 런타임에 한 줄씩 소스코드를 기계어로 변환하면서 실행 

2. 성능

  • 컴파일러는 이미 컴파일 해놓은 object code를 실행만 하면 되므로,  인터프리터보다 실행 속도가 빠름

3. 메모리 효율성

  • 컴파일러는 소스코드 전체를 object code로 변환해 저장하기 때문에, 인터프리터보다 더 많은 메모리 사용

4. 보안

  • 컴파일러는 object code가 기계어로 된 실행 파일이 되므로, 보안이 상대적으로 우수
  • 인터프리터는 소스코드 자체가 실행 파일이 되므로, 보안이 상대적으로 약함 

5. 플랫폼 독립성 (이식성)

  • 컴파일러는 컴퓨터의 CPU, OS에 맞는 기계어로 변환합니다. 다른 플랫폼에선 변환된 object code 실행 파일이 동작하지 않을 수 있으므로, 플랫폼에 종속적 (이식성 떨어짐)
  • 인터프리터는 소스코드가 실행 파일이 되므로 CPU, OS의 영향을 받지 않아 플랫폼에 독립적 (이식성 뛰어남)

5. 디버깅 난이도

  • 컴파일러는 소스코드를 완전히 스캔한 후에 에러를 발생시키므로, 디버깅이 상대적으로 어려움
  • 인터프리터는 첫 에러가 발생한 지점에서 실행을 멈추기 떄문에, 디버깅이 상대적으로 쉬움 

 

 

 

컴파일 언어: C, C++, Go

인터프리터 언어: Python, JavaScript, PHP, HTML