728x90

노마드 코더 노개북 3일차!

이번에 책을 읽으며 새롭게 배운 내용인 파이썬이 C언어보다 느린 이유에 대해 설명해보려 한다.

 

파이썬이 C보다 느리다는 것은 당연한 사실로 받아들이고 코드를 짰었다.

하지만 부끄럽게도 왜 파이썬이 더 느린지는 정확히 알지 못한채 '그냥 느리다니까 느리다' 정도로만 알고 있었다.

이번에 책에서 실생활 비유를 통해 그 이유를 설명해주었는데, 이를 바탕으로 글을 작성해보려 한다.

 

그렇다고 파이썬이 느린 언어라고 오해하면 안된다.

파이썬도 충분히 빠르지만 C에 비해서는 느리다는 뜻이다.

 

두 언어의 속도 차이에 대해 이해하려면, 인터프리터와 컴파일에 대한 개념을 먼저 알고 가야 한다.

파이썬이 C보다 느린 이유는 한마디로 정의하자면

파이썬은 인터프리터 언어이고, C는 컴파일언어이기 때문이다.

 


인터프리터 vs 컴파일

프로그래밍 언어는 고수준 언어로, 이를 0과 1로 하드웨어가 알아들을 수 있게 변환해주는 과정이 필요하다.

언어가 해석되는 방식은 두 가지가 있는데 그 방법에 따라

인터프리트 언어, 컴파일 언어 두 개로 나뉜다.

 

인터프리트 언어

인터프리트 언어는 동시 통역이라 생각하면 편하다.

뉴스를 보면 높으신 분들이 외국 방문을 했을 때 뒤에 통역해주시는 분을 옆에 두고 대화하는 것을 볼 수 있다.

한마디를 하면 통역사가 상대방이 알아들을 수 있는 언어로 실시간으로 번역해서 들려준다.

 

이와 같이 프로그래밍 언어 중에서 중간에 인터프리터가 실시간으로 명령어를 하드웨어에게 0과 1로 번역해주는 언어가 있는데 이를 인터프리터 언어라 한다.

 

대표적인 인터프리트 언어로는 파이썬, 자바스크립트가 있다.

코드를 작성하면 중간에 인터프리터가 0,1로 이를 실시간으로 번역하여 하드웨어에게 전달하는 방식이다.

 

 

컴파일 언어

반대로 높으신 분들이 서한을 주고 받을 때를 생각해보자.

각자 본인이 하고 싶은 말을 모국어로 쭉 작성한 뒤, 번역가가 이를 통째로 번해서 상대측에게 전달한다.

이는 실시간으로 말을 주고 받는 방식과 다르다.

 

프로그래밍에선 이를 '컴파일한다'라고 한다.

대표젹인 컴파일 언어로는 C언어가 있다.

 

코드를 작성하면 컴파일을 통해 기계어로 한번에 번역해서 하드웨어에 전달해주는 언어인 것이다.

따라서 Visual Studio에서 C언어를 작성한 후 실행을 해주려면 빌드 과정(컴파일 + 링킹)을 무조건 거쳐야 하는 이유도 C언어가 컴파일 언어라는 점에 있다.

 

 

속도 차이가 나는 이유

그렇다면 이 두 방식에 따른 속도차이는 왜 일어나는 것일까?

 

우선 파이썬은 명령어 한줄한줄을 인터프리터가 하나씩 실시간으로 0과 1로 번역을 해줘야 한다.

이때 작성한 코드 양이 많을수록 인터프리터가 동시통역해야 할 양은 당연히 늘어나게 된다.

 

반대로 C는 완성된 코드 스크립트를 한번에 묶어서 통번역을 한다.

한줄한줄 실시간 번역하는 중간 과정이 필요없는 것이다. 따라서 이에 따라 속도가 파이썬보다 더 빨라지게 된다.

 

또한 인터프리트 언어는 실시간으로 번역을 이미 진행하는 중에 중간 오류가 나오면 그때서야 오류를 뱉어낸다.

100줄로 된 코드 중 98번째 줄에 오류가 났으면 1부터 97번째 줄까지 전부 실시간 번역을 한 후에야 98번째 줄에 막혀 오류 메시지를 반환하는 것이다.

 

반면 C언어는 컴파일 과정에서 해당 스크립트를 전부 다 번역할 수 있을 때까지 실행을 결과를 실행하지 않는다.

번역이 어려운 지점이 있으면 애초에 번역을 시작하지 않는 것이다.

 


 

노마드 코더 슬랙 처음으로 가입해서 둘러봤는데,

개발하면서 정말 유용하고 다양한 정보들이 공유되고 있었다!

이걸 왜 이제 안거지...?  

728x90

+ Recent posts