Computer/CS

컴파일/트랜스파일/인터프리터

에린_1 2024. 8. 16. 09:38
728x90

컴파일/트랜스파일/인터프리터

컴파일(Compile)

  • 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것이 컴파일이다.
  • C언어를 기계어로 옮기는 것, Java를 Bytecode로 옮기는 것 모두 이 정의에 따르면 Compile에 해당한다. 심지어 TypeScript를 JavaScript로 옮기는 것 역시 이 범주안에 속한다고 할 수 있기도 하다. (엄밀히 말하면 트랜스파일링이다.)
    • 고수준의 언어를 바이트 단위의 기계어로 변환해야 컴파일이라고 말하는 것이 아니다. 컴파일은 한 언어로 작성된 코드를 다른 언어로 옮기는 일 자체를 통칭한다고 보면 된다.

트랜스파일(Transpile)

  • 한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 것이 트랜스파일이다.
  • Transpile은 Compile의 Subset인데, 추상화 정도가 유사한 언어를 다른 언어로 Compile하는 것을 특별히 Transpile이라고 부른다고 보면 된다.
    • 예를 들어 높은 버전의 자바스크립트 코드를, IE 호환성을 위해 낮은 버전의 자바스크립트로 변환하는 Babel도 이 범주에 속한다.
  • 타입스크립트를 자바스크립트로 컴파일 하는 것 역시 엄밀히 따지자면 트랜스파일링이다.
  • 예시
    • C++ → C
    • ES6 → ES5( Babel )
    • typescript / coffeescript → Javascript
    • sass / scss → css

인터프리터(Interpreter)

  • 사람이 알아보기 쉬운 프로그래밍 언어로 작성한 코드를 한 줄 씩 기계어로 번역하는 번역기다. 인터프리터는 즉각적인 번역에 특화된 번역기로 번역 속도가 빠르다. 하지만 한 줄 작성하고 엔터칠 때마다 새롭게 번역을 하니, 프로그램을 매번 실행하기에는 느리게 된다.

컴파일러 vs 인터프리터

  • 인간이 읽기 편한 고수준의 프로그래밍 언어를 컴퓨터가 읽을 수 있게 저수준의 기계어로 변환하기 위해 대표적인 2가지 이다.
  • 컴파일러
    • 프로그램 전체를 스캔하여 이를 모두 기계어로 번역한다.
    • 전체를 스캔하기 때문에 대개 컴파일러는 초기 스캔 시간이 오래 걸린다. 하지만 전체 실행 시간만 따지고 보면 인터프리터 보다 빠르다.
    • 기계어 번역 과정에서 많은 메모리를 사용한다.
    • 그리고 컴파일러는 전체 코드를 검사한 후에 오류 메시지를 생성하기 때문에 프로그램을 실행 전에 오류를 발견할 수 있다.
    • 대표적으로 C, C++, JAVA 등이 있다.
  • 인터프리터
    • 프로그램 실행시 한 번에 한 문장씩 번역한다.
    • 한 번에 전체를 스캔하고 실행파일을 만들어서 실행하는 컴파일러보다 실행시간이 더 걸린다. 하지만 컴파일러보다 메모리 효율이 좋다.
    • 또한 인터프리터는 오류 메시지 생성과정이 컴파일러와 다르다. 인터프리터는 한번에 한문장씩 번역하기 때문에 프로그램을 실행시키고 한 문장씩 번역될 때 오류를 만나게 되면 바로 프로그램을 중지하게 된다. 그래서 프로그램을 실행해봐야지만 오류 발견이 가능해서 사용성에 문제가 될 수 있다.
    • 대표적으로 Python, Ruby, Javascript 등이 있다.

참조

https://inpa.tistory.com/entry/CS-🖥️-컴파일-트랜스파일-인터프리터-비교-쉽게-설명

728x90

'Computer > CS' 카테고리의 다른 글

Redis  (0) 2024.07.16
Database - 트랜잭션 격리 수준(Transaction Isolation Level)  (0) 2024.07.11
Database - 정규화(Normalization)  (0) 2024.07.10
Database - Index  (0) 2024.07.09
Database - Anomaly  (0) 2024.07.09