더북(TheBook)

6.6 믿음의 도약

실행 흐름을 따라가면서 프로그램을 읽는 방법도 있지만, 금방 질려버릴 수 있다. 프로그램을 읽는 다른 방법은 내가 “믿음의 도약(leap of faith)**이라고 부르는 것이다. 함수 호출을 만났을 때 실행 흐름을 따라가는 대신 그 함수가 올바르게 동작할 것이고 올바른 결과를 반환할 것이라고 가정하는 것이다.

사실은 내장 함수를 사용하면서 믿음의 도약을 이미 연습하고 있었다. math.cosmath.exp를 호출하면서 이들 함수의 바디를 조사하지 않았다. 내장 함수를 작성한 사람들이 훌륭한 프로그래머일 것이라 가정하고, 내장 함수가 잘 동작하리라 가정한 것에 불과하다.

자신이 작성한 함수들 중에 하나를 호출할 때도 마찬가지다. 예를 들어 109쪽의 불 함수에서 어떤 숫자를 다른 숫자로 나눌 수 있는지 판단하는 is_divisible 함수를 작성했었다. 이 함수가 올바르게 동작한다고 확신할 수 있다면, 즉 코드를 조사하고 테스트해서 확신할 수 있다면 함수의 바디를 다시 살펴보지 않아도 사용할 수 있다.

재귀적인 프로그램에서도 이는 마찬가지다. 재귀 호출을 만났을 때 실행 흐름을 따라가지 않고 재귀 호출이 동작한다고(그리고 올바른 결과도 반환한다고) 가정하고 스스로에게 n-1의 팩토리얼을 구할 수 있다면 n 팩토리얼을 계산할 수 있는가?라고 질문해야 한다. n을 곱하면 할 수 있다는 것이 분명해야 한다.

물론, 함수 작성을 끝내지도 않았는데도 함수가 올바르게 동작할 것이라고 가정해야 한다는 게 다소 이상할 것이다. 그게 믿음의 도약이라고 부르는 이유다!

 


 

** 역주 철학자 키르케고르는 신이 있다는 근거가 없이도 종교를 믿는다는 행위, 믿기 위해 믿을 수밖에 없는 것을 두고 믿음의 도약(leap of faith)이라고 했다. 여기서는 함수가 올바르게 동작하고, 올바른 결과를 반환할 것이라는 근거가 없지만, 그렇다라고 믿고 넘어가는 것을 말한다.

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