백준에서 Python를 사용해서 문제를 풀고 제출할 때 Python3와 PyPy3 중 하나를 선택하여 제출하게 된다. 그럼 Python3 와 PyPy3의 차이가 뭘까?
둘의 차이를 알아보기 전에 우선 컴파일 언어와 인터프리터 언어가 무엇인지 정확하게 알아야 한다.
컴파일 언어는 내가 작성한 소스코드 전체를 컴퓨터가 이해할 수 있는 기계어로 번역한 후 한번에 실행하는 방식이다.
즉, 번역과 실행이 따로 이루어 지는 방식을 의미한다.
대표적으로는 C언어, C++, Go 등이 있다.
인터프리터 언어는 소스코드 한 줄씩 번역과 실행이 동시에 진행된다.
번역은 인터프리터로 이루어진다.
대표적으로는 Python, R, JavaScript 등이 있다.
그 밖에 우리가 많이 사용하는 언어인 Java는 처음에는 인터프리터 언어로써 사용되다가, 성능 향상을 위해 컴파일 언어의 장점을 가져온 경우로 하이브리드 언어라고도 한다.
Python3는 Python과 C로 구성된 언어로 구현체가 CPython이다. 즉 Python3는 인터프리터 언어이면서 컴파일 언어이다.
PyPy3는 Python3와 같은 문법을 사용하지만 JIT(Just In Time) 컴파일 방식을 도입한 것이다. JIT 컴파일 방식은 프로그램 실행 전에 컴파일하는 대신에 프로그램을 실행할 때 필요한 부분에서 바로 컴파일 하는 방식이다.
자주 쓰이는 코드를 캐싱하는 기능이 있기에 인터프리터 언어의 느린 실행 속도를 개선할 수 있다.
결과적으로 간단한 코드상에서는 Python3가 메모리, 속도 측면에서 우세하고
반복문 등의 복잡한 코드들을 사용하는 경우에는 PyPy3가 우세하다.
※ 그렇기에 코드의 상황에 따라 두 구현체(Python3, PyPy3)를 적절하게 사용하는게 가장 효율적이라고 말할 수 있다.