컴파일(compile) 등장 배경

어셈블리어(assembly language)

  • 기계어와 일대일 대응되는 저급 언어
    • 컴퓨터 구조에 따라 사용하는 기계어가 달라서 어셈블리어도 각각 다름
    • 새로운 아키텍쳐가 적용된 CPU가 나오면 기존 프로그램도 어셈블리어를 다시 작성해야 함
    • 통일된 언어체계로 작성한 고급 언어 등장
    • 고급 언어로 작성한 코드를 어셈블리어로 번역하는 컴파일 등장
    • 컴파일러와 인터프리터는 컴파일 방식

컴파일러(compiler)

  • 프로그램 전체를 스캔하여 기계어로 번역

​ => 실행파일을 만들어 실행할때 사용

​ => 초기 스캔 시간이 오래 걸린다

​ => 번역 후 실행 속도는 인터프리터 보다 빠름

  • 번역 과정에서 오브젝트 코드 파일 작성

​ => 오브젝트 코드를 묶어서 하나의 실행 파일로 다시 만드는 링킹(Linking) 작업 수행

​ => 인터프리터 보다 많은 메모리 사용

  • 전체 코드를 검사한 후에 오류 메시지를 생성 => 실행 전에 오류를 발견 할 수 있다
  • 대표적인 언어로 C, C++, JAVA 등이 있다

인터프리터(interpreter)

  • 한 문장씩 즉시 실행
  • 컴파일러보다 전체 실행 속도가 느리다
  • 메모리 효율이 좋다
  • 프로그램을 실행해봐야 오류 발견이 가능
  • 대표적인 언어로 Python, Ruby, Javascript 등이 있다

Tip. 자바는 javac로 컴파일 하여 클래스 파일을 생성하고, 실행 시 자바 인터프리터가 한 줄씩 번역하기에 컴파일 언어이면서 인터프리터 언어이다

정리

  • 컴파일러는 프로그램 전체를 스캔하여 한 번에 컴파일합니다. 이로 인해 초기 스캔 시간이 오래 걸리지만 이후 실행 속도는 인터프레터에 비해 빠릅니다. 또한 전체를 스캔하기 때문에 실행 전에 오류를 발견하고 수정할 수 있습니다. 다만 오브젝트 코드를 생성하고 링킹 작업을 수행하기 때문에 인터프리터 보다 많은 메모리를 사용합니다.
  • 인터프리터는 한 번에 한 문장씩 컴파일합니다. 컴파일러 보다 실행 속도는 느리지만 메모리 효율이 좋습니다.

참고

보완/복습

  • 2023.11.06 복습