어쨌든 이런 일을 하려면, inner()는 자기가 사용하는 모든 주변 변수의 참조를 외부 함수가 리턴된 이후에도 계속 바라볼 수 있게 어딘가에 보관해야 한다. 이 일을 하는 함수를 클로저(closure)라고 한다. 요즘은 이 용어를 모든 일급 함수에 대해 사용하는 경향이 있지만, 함수가 아무 변수도 클로즈 오버(close over, 주변을 에워싸다)하지 않는 경우에도 클로저라고 하는 것은 잘못이다.
여러분도 짐작하다시피, 클로저 같은 기능을 구현하면 복잡도가 증가한다. 함수가 리턴되는 순간에 로컬 변수는 증발해 버리므로 변수 스코프가 정확히 스택처럼 동작하리라 가정할 수 없기 때문이다. 이 책은 여러분이 이런 것들을 어떻게 하면 제대로, 효과적으로 구현할 수 있는지 깨닫는 즐거움을 선사하고자 한다.
'클로저'는 피터 J. 랜딘(Peter J. Landin)이 처음 만들어낸 용어다. 그렇다, 사실 모든 프로그래밍 언어 용어의 절반 가까이는 이 사람이 고안했다. 그중 대부분은 「The Next 700 Programming Languanges9」라는 놀라운 논문 한 편에서 쏟아져 나왔다.
이런 종류의 함수를 구현하려면 함수의 코드와 그 함수가 필요로 하는 주변 변수들을 함께 묶는 자료 구조를 만들어야 한다. 그는 이것이 함수가 필요로 하는 변수를 클로즈 오버해서 담아둔다는 뜻에서 '클로저'라고 불렀다.