더북(TheBook)

지금까지는 주로 구현하기 쉬운가에 대해 얘기했지만, 자료 구조를 선택할 때는 다른 요인들도 고려해야 한다. 한 가지는 런타임이다. 어떤 자료 구조가 다른 자료 구조보다 빠른 데에는 종종 이론적인 이유가 있다. 예를 들어 원소의 개수가 매우 많다면 in 연산자는 리스트보다 사전에서 더 빠르다.

그러나 어떤 구현이 더 빠른지 항상 미리 알 수는 없다. 한 가지 방법은 두 가지를 모두 구현하고, 어느 쪽이 더 나은지 관찰하는 것이다. 이러한 방법은 벤치마킹(benchmarking)이라고 한다. 실용적인 방법으로는 구현이 가장 쉬운 자료 구조를 선택한 후에 의도한 응용 프로그램에 쓸 만큼 빠른지 관찰하는 것이다. 충분히 빠르다면 더 계속하지 않아도 된다. 그렇지 않다면 profile 모듈 같은 도구를 사용해 프로그램에서 가장 긴 시간이 걸리는 부분을 찾아내야 한다.

고려할 다른 요인으로는 저장 공간이 있다. 예를 들어 접미어 컬렉션에 히스토그램을 사용하면 텍스트에 해당 단어가 몇 번이 나와도 각 단어를 한 번만 저장하면 되므로 작은 공간만 차지한다. 어떤 경우에는 공간 절약 덕분에 프로그램 실행 속도가 더 빨라지기도 한다. 극단적인 경우지만 메모리가 부족하면 프로그램이 실행조차 안 될 수 있다. 그러나 많은 응용 프로그램에서 공간은 런타임 이후에 부차적으로 고려된다.

마지막 결론: 지금까지의 논의에서 나는 분석과 프로그램의 생성에 한 가지 자료 구조를 사용해야 한다고 전제해왔다. 그러니 이 둘은 별도의 단계이므로 분석 단계에서 한 가지 자료 구조를 사용하고 프로그램의 생성 단계에서 다른 자료 구조로 변환할 수도 있다. 프로그램의 생성에서 절약한 시간이 변환에 들어간 시간을 초과하지 않는다면 이런 방법도 실제로는 이득이 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.