1.13 선행 참조 문제
컴퓨터 프로그래밍 언어 대부분에서 선행 참조 문제(forward reference problem)는 모든 프로그래머를 괴롭힌다. 문제는 바로 이것이다. 어떤 순서로 내 함수를 정의해야 할까?
일반적인 규칙은 함수를 호출하기 전에 반드시 정의해야 한다는 것이다. 바로 이 규칙이 문제를 야기한다. 어떤 면에서는 변수를 사용하기 전에 반드시 정의해야 한다는 것과 비슷하다.
그렇다면 호출 대상 함수가 존재하는지(정의되었는지) 확신할 수 있을까? 그리고 혹시 서로를 호출하는 함수가 2개 있다면 어떻게 될까? 다음에 소개하는 두 가지 규칙만 지키면 이 문제를 피할 수 있다.
• 함수를 호출하기 전에 모두 선언한다.
• 그러고 나서 소스 파일 맨 끝에서 정의한 첫 모듈 - 수준 함수를 호출한다(모듈 - 수준 코드는 함수 밖에 있는 코드를 의미한다).
def 문으로 함수를 정의할 때 아직 함수가 실행되지 않았기 때문에 정의되지 않은 함수도 호출할 수 있다. 만약 funcA가 funcB를 호출한다면 funcA를 먼저 정의해야 하고, funcA를 실행하기 전에 funcB 역시 정의해야 한다.