Page 24 -
P. 24
4.1 성능 P Y T H O N
이번 절에서는 프로그래밍할 때 언제나 신경 써야 하는 간결한 주문에 대해 알아볼 것이다. 바로 ‘비 4
용을 주의하라’는 것이다. 여러분이 엔지니어가 되면 이것은 여러분이 해야 할 일이 될 것이고, 생물학
자나 물리학자가 되면 비용에 따라 여러분이 해결할 수 있는 과학 문제들이 제한될 것이다. 기업가나 알고리즘과 데이터 구조
경제학자가 되면 이 주문은 당연한 것이 될 것이고, 소프트웨어 개발자가 되면 여러분이 만드는 소프
트웨어가 고객에게 유용할지 여부를 결정하게 될 것이다.
코드 실행 비용을 연구하기 위해 과학자들이 자연 세계를 이해하기 위해 널리 사용하는 과학적 기법
을 이용해 프로그램 자체를 연구한다. 그리고 비용을 간결히 설명하는 모델을 유도하기 위해 수학적
분석 기법을 적용한다.
우리는 이 자연 세계의 어느 특징을 연구하는가? 대부분의 경우 단 하나의 특징에 관심을 가진다. 바
로 시간이다. 프로그램을 실행할 때는 언제나 자연 세계에 관련된 실험을 수행하고, 전자 회로로 구
성된 복잡한 시스템이 아주 많은 불연속 이벤트에 의해 발생하는 일련의 상태 변화를 거쳐 결국에는
우리가 해석하고자 하는 결과를 나타내는 상태에 안정화된다. 우리가 이 결과를 보기까지 시간이 얼
마나 걸릴까? 시간이 밀리초, 초, 하루, 혹은 일주일이 걸리는지는 아주 큰 차이가 있다. 따라서 우리
는 로켓을 발사하거나, 교량을 만들거나, 원자를 충돌시키는 경우와 마찬가지로 과학적 기법을 통해
이 상황을 적절히 통제하는 방법을 배우고자 한다.
최신 프로그램과 프로그래밍 환경이 복잡한 반면 이 프로그램은 간단하지만 아주 강력한 일련의 개
념으로부터 개발되었다. 프로그램이 실행할 때마다 동일한 결과를 만들어내는 것은 어찌 보면 아주
작은 기적이다. 필요한 시간을 예측하기 위해 우리는 프로그램을 만들기 위해 사용하는 다소 단순한
기반 구조를 이용한다. 우리가 작성하는 프로그램의 비용을 예측하고 성능 특성을 얼마나 쉽게 파악
할 수 있는지 알게 되면 놀랄 것이다.
과학적 방법은 다음과 같이 다섯 가지 활동으로 요약될 수 있다.
• 자연 세계의 특징을 측정한다.
• 관찰 결과에 맞는 모델의 가설을 수립한다.
• 가설에 기반해 발생할 일을 예측한다.
• 더 많이 관찰해 예측을 검증한다.
• 가설과 관찰 결과가 일치할 때까지 이 과정을 반복해 모델을 입증한다.
과학적 기법을 적용해 실험을 설계할 때, 다른 사람도 가설을 검증할 수 있도록 실험을 재연할 수 있
게 설계하는 것이 중요하다. 그리고 우리가 세운 가설은 반박할 수 있어야 한다. 가설이 틀린 경우에
는 검증하고 수정할 수 있어야 한다.
477