학문
미스터리살롱
컴파일 언어와 인터프리터 언어는 왜 실행속도가 다른가요?
프로그래밍 언어가 컴파일 방식과 인터프리터 방식으로 나뉜다고 배우는데, 왜 이 두 방식이 프로그램 실행 속도에 차이를 만드는지 궁금합니다.
4개의 답변이 있어요!
안녕하세요. 김재훈 전문가입니다.
컴파일 언어는 프로그램 실행 전 전체 소스 코드를 컴퓨터가 즉시 이해할 수 있는 기계어로 한 번에 번역해 두기 때문에 실행 시점에는 추가적인 번역 과정 없이 최고 속도로 직접 명령을 처리합니다 반면 인터프리터 언어는 프로그램을 실행할 때 소스 코드를 한 줄씩 읽어 실시간으로 기계어로 번역하며 진행하므로 번역 작업에 따른 지속적인 오버헤드가 발생합니다 또한 컴파일러는 번역 과정에서 코드 전체를 분석해 강력한 최적화를 수행할 수 있지만 인터프리터는 당장 실행할 한 줄의 맥락만 파악할 수 있어 효율적인 최적화를 적용하기 어렵습니다ㅈ결과적으로 기계어 사전 변환 여부와 실행 중 실시간 해석 과정의 유무가 두 방식 간의 근본적인 실행 속도 차이를 만들어냅니다
채택 보상으로 366베리 받았어요.
채택된 답변안녕하세요. 최정훈 전문가입니다.
컴파일 언어는 소스 코드를 실행하기 전에 한번의 기계어로 번역해둡니다. 그래서 실행할 때 번역 과정이 없어서 속도가 훨씬 빠르죠. 반면에 인터프리터 언어는 코드를 한줄씩 읽으면서 즉시 해석 해석합니다. 그렇게 바로 실행하다 보니까 아무래도 실행 중에 번역 오버헤드가 발생해서 느릴 수밖에 없는 거죠. 특히나 반복문 같은걸 돌릴 때는 매번 문장을 다시 해석해야 돼서 속도 차이가 더 크게 벌어지게 됩니다.
안녕하세요. 박재화 전문가입니다.
컴파일 언어는 프로그램을 실행하기 전에 전체 코드를 CPU가 이해할 수 있는 기계어로 미리 변환하는데, 그래서 실행할 때는 변환 과정이 거의 필요하지 않기 때문에 빠르게 동작이 가능합니다.
반면 인터프리터 언어는 프로그램을 실행하면서 코드를 한 줄씩 해석하거나 중간 형태로 변환해 처리하게 됩니다. 이 과정이 실행 중에 반복되기 때문에 추가적인 시간이 필요해 전통적으로는 컴파일 언어보다 느린 편입니다. 다만 요즘은 JIT 컴파일처럼 자주 쓰는 코드를 실행 중에 기계어로 바꾸는 기술이 있어 속도 차이가 많이 줄긴 했습니다.
결국에는 실행속도 차이는 코드를 언제 기계어로 변환하느냐와 실행 중 해석 작업이 얼마나 필요한가에서 생긴다고 보면 되겠습니다.
안녕하세요. 이수민 전문가입니다.
번역 시점의 차이가 속도 차이를 만들어요. 컴퓨터는 기계어만 이해할 수 있어서 사람이 쓴 코드는 반드시 번역을 거쳐야 하는데, 컴파일 언어는 실행 전에 프로그램 전체를 기계어로 미리 번역해둬요. 실행할 때는 이미 완성된 기계어를 CPU가 그대로 달리기만 하면 되죠. 인터프리터 언어는 실행하면서 한 줄씩 읽고 번역하고 수행하기를 반복해요. 책 전체를 번역본으로 만들어두고 읽는 것과, 옆에서 통역사가 한 문장씩 실시간 통역해주는 것의 차이예요.
실행 중 번역은 그 자체로 일이 추가되는 거라 매 순간 통역 비용이 붙어요. 특히 반복문에서 차이가 벌어지는데, 같은 줄을 백만 번 돌면 인터프리터는 백만 번 번역을 다시 해요. 컴파일 방식은 번역이 이미 끝났으니 반복해도 추가 비용이 없고, 번역 단계에서 코드 전체를 보며 미리 최적화까지 해둬요. 전체 지도를 보고 지름길을 찾아둔 것과 눈앞의 길만 보며 가는 것의 차이가 더해지는 거예요.
그런데 요즘은 경계가 많이 흐려졌어요. 파이썬이나 자바스크립트 같은 인터프리터 계열 언어들도 자주 실행되는 부분을 실행 도중 기계어로 번역해두는 JIT 컴파일 기술을 써서 격차를 크게 줄였거든요. 자바는 아예 중간 코드로 컴파일한 뒤 실행 시 JIT로 마저 번역하는 혼합형이고요. 그래서 실무에서는 순수 실행 속도가 필요하면 C나 러스트 같은 컴파일 언어, 개발 속도와 편의성이 우선이면 파이썬 같은 언어를 고르는 식으로 용도에 따라 나눠 써요 :)