프로그래머스 데브코스 44일차(compile vs transpile)

박상하·2023년 12월 27일
0

Compile vs Transplie

멘토링시간에 면접질문에 대한 리스트를 받아볼 수 있었다.

그 중 눈에 띄였던 compiler와 transpiler의 차이점에 대해 정리를 해보고자한다.

Compile

컴파일(compile)=> 한 언어로 작성된 코드를 다른 언어로 변환하는 것

예를 들어서 C언어를 기계어로 옮기는 것이 그 예시가 될 수 있다.

여기서 주의해야하는 점은 고수준의 언어를 바이트 단위의 기계어로 변환해야 컴파일이라고 하는 것이 아니다.

Transpile

트랜스파일(transpile)=> 한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 것

예를 들어 ES6의 코드를 ES5의 코드로 변환하는 것이 그 예시가 된다.
또는 Typescript를 javascript로 변환하는 것 역시도 예시가 된다.

대표적인 Transpiler인 Babel에 접속하게 되면 다음과 같은 웹 페이지를 볼 수 있다.

"Babel is a Javascript compiler"

분명 Babel은 크로스브라우징이 가능하도록 Javascript의 코드를 사용자의 브라우저 수준에 맞게 트랜스파일링을 해주는 역할을 하는데

웹 페이지에서는 컴파일러라고 한다.

사실 Compile이 좀 더 큰 범주에 속한다

Transpiler의 다른 말은 source to source compiler라고도 한다.

즉 compile이 좀 더 큰 범주에 속하고 그 안에 트랜스 파일의 개념이 있다고 생각하면된다.

Compile=> 다른 언어로 변환하는 것
Transpile=> 한 언어에서 소스코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 것

그런데 Transpile에서 비슷한 수준이라는 단어가 잘 이해되지 않아 이를 좀 더 알아보았다.

추상화

추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
-from wikipedia

즉, 추상화란 핵심적인 개념 또는 기능을 간추려 내는것.

추상화의 수준이 높다면? 많은 디테일을 숨겼다.
추상화 수준이 낮다면? 디테일이 많이 드러났다.

즉 트랜스파일은 한 언어에서 비슷한 수준의 추상화를 가진 다른 언어로 변경되는 것이고
이 말은

"트랜스파일링은 언어에서 언어로 변경되는 과정 중에, 원본 언어의 코드 복잡도를 유사한 수준의 대상 언어로 변환하는 것"

사실 이렇게 보면 compile과 transpile을 크게 구분하여 사용하기보다는
적절한 상황에 맞는 용어를 사용하면 될 거 같다.

0개의 댓글

관련 채용 정보