느리디 느린 프로그램 실행속도를 조금이나마 높여보고자 검색을 하다가, MOOC 플랫폼인 edwith에서 KAIST 김문주 교수님의 '파이썬 (Python) 으로 배우는 프로그래밍 기초 (CS101)'의 '프로그램 속도 향상 방법'을 보게 되었습니다. 아래 글은 위 강의를 스스로 정리하기 위해 작성한 것입니다. 혹시 오류가 있다면 지적해주십시오.
컴퓨터는 코드를 직접 이해할 수 없어서 이를 컴퓨터 언어로 번역해주는 프로그램이 필요한데, 그 프로그램에는 C, C++, python 등 수없이 많습니다. 컴퓨터에게 코드를 번역해주는 방식에 차이가 있는데, 파이썬은 Interpreter(해석기)의 대표적인 프로그램이고, C, C++, Java는 Compiler에 해당합니다.
해석기는 코드를 한 줄 한 줄 컴퓨터 언어로 번역한 후 실행하는 과정을 반복합니다. 따라서 코드 작성자 입장에서 문제점이 어디에서 어떻게 발생하는지를 파악할 수 있는 점이 장점입니다. 하지만 이러한 과정으로 인해 속도가 저하됩니다.
반면 컴파일러는 모든 코드를 한 번에 번역한 후 한 번에 실행합니다. 그래서 속도는 빠르지만, 코드 작성자는 어디서 문제가 발생하는지 한 번에 알아내기 어려우므로 코드를 바꾸기가 불편하다는 단점이 있습니다.
강의에서 이를 비유한 예시가 이태리어로 작성된 요리책을 번역하는 방법입니다. 그때그때 필요한 요리를 하기 위해서는 그 요리에 관한 요리법(recipe)만 우리말로 번역하면 됩니다(interpreter). 하지만 요리책을 전부 번역해놓으면, 필요한 음식이 생기면 번역된 요리책을 보고 요리를 빨리 할 수 있습니다(compiler).
하지만 파이썬이 속도가 늦다고 해서 프로그램만 탓할 것이 아니라, 정교하고 효율적인 알고리즘을 짜는 것이 프로그램을 선택하는 것보다 훨씬 중요하다고 합니다. 그 예로 본 강의에서는 simple-sort, merge-sort를 드는데, 숫자를 정렬할 때 사용하는 방식에 따라 계산시간이 기하급수적으로 차이가 납니다.
'python' 카테고리의 다른 글
| [파이썬(python)] ValueError: Fewer non-zero entries in p than size (0) | 2020.02.15 |
|---|---|
| [파이썬(python)] 문자열 연결하기(합치기) (0) | 2020.02.13 |