안녕하세요. 이번 포스팅에서는 컴파일러와 인터프리터에 차이와 장단점에 대해서 알아보겠습니다.
컴파일러와 인터프리터는 사람이 이해할 수 있는 고급언어로 작성된 소스 코드를 기계가 이해할 수 있는 기계어로 번역한 후에 프로그램을 실행하는 것입니다.
그럼 차이점은 무엇일까요?
컴파일러(번역기)
컴파일러는 사람이 고급 언어를 작성을 하면 해당 고급 언어를 한 번에 번역을 합니다.
그렇기 때문에 줄 단위로 번역을 하는 인터프리터에 비해 번역 시간은 오래 걸리는 편입니다.
하지만, 컴파일러는 한 번 번역을 하면 실행 파일이 생성이 되어 다음에 실행을 할 때 기존에 생성되었던 실행 파일을 실행하기 때문에 인터프리터에 비해 실행 시간이 빠른 편입니다.
인터프리터(실행기)
인터프리터는 컴파일러와는 다르게 한 줄 한 줄씩 번역을 진행하기 때문에 한 번에 번역을 진행하는 컴파일러에 비해 번역 시간은 빠른 편입니다.
하지만 번역을 할 때 실행 파일을 생성하지 않기 때문에 매번 실행할 때마다 같은 번역을 진행해야 합니다.
그래서 매번 번역을 거치기 때문에 인터프리터를 사용하는 언어들은 컴파일러를 사용하는 언어들에 비해 실행 속도가 느린 편입니다.
언뜻 보기에는 컴파일러가 인터프리터보다 실행 속도가 빠르기 때문에 좋아보이는데 인터프리터도 사용하는 이유가 무엇일까요?
컴파일러는 플랫폼(하드웨어)에 종속적이지만, 인터프리터는 모든 플랫폼(하드웨어)에 종속되지 않는 특징이 있습니다.
전 세계에는 수많은 CPU가 존재합니다.
이들 중에는 서로 호환이 되는 CPU가 있을 것이고 호환이 되지 않는 CPU도 존재할 것입니다.
가령 A라는 CPU와 B라는 CPU가 존재하는데 서로 호환이 되지 않는다고 해봅시다.
A CPU에서 돌아가는 프로그램을 만들고 컴파일러를 통해 실행파일을 만들고 이를 B CPU에서 실행시키면 실행이 될까요?
작동이 안됩니다.
A CPU에서 컴파일러를 통해 실행파일을 만들게 되면 A 하드웨어의 환경에 맞게 변환을 하기 때문에 A CPU와 호환되는 CPU에서만 작동될 수 밖에 없습니다.
하지만 인터프리터는 해당 프로그램을 번역하는 하드웨어의 환경에 맞게 변환을 하기 때문에 B CPU에서 실행을 해도 잘 작동할 것입니다.
이러한 장점 때문에 인터프리터를 사용하기도 한답니다.
자바에서는 .java 파일을 javac 컴파일러가 바이트 코드인 .class 파일로 변환을 합니다.
.class 파일로 변환을 한 상태에서는 플랫폼에 종속적입니다.
그러나 자바가상머신(JVM)의 구성 중 하나인 자바 인터프리터는 .class 파일 내의 바이트 코드를 특정 환경의 기계에서 실행될 수 있도록 변환을 합니다. 자바가상머신(JVM)에 대해 자세히 알아보시려면 cbw1030.tistory.com/289을 참고해 주세요.
예를 들어 매킨토시에서 작성된 프로그램이 IBM PC에서 실행될 수 있다는 것입니다.
'Programming > 용어 정리' 카테고리의 다른 글
JWT란 무엇이며 어떤 흐름을 가질까? (0) | 2021.05.19 |
---|