Python의 함수는 값이며, 몇 가지 추가적인 특징(변수 할당, 매개변수 전달, 반환값으로 사용 가능 등) 때문에 일급 객체로 분류할 수 있습니다. Python은 함수 안에 함수를 정의할 수 있으며, 그렇게 정의된 내부 함수는 외부 함수의 문맥에 접근할 수 있습니다. 쉽게 말하면, 외부 함수가 가지고 있는 지역변수에 접근할 수 있다는 것입니다.

calculator라는 함수를 정의했고, 이 함수는 두 개의 인자를 받아 처리하는 함수 fn, 두 정수 a, b를 받습니다. 함수 내부에는 sum함수가 정의되어 있습니다.

  • 만약 fn이 전달되었다면(if fn) 인자 a와 b를 전달하며 해당 함수 fn을 호출하고, fn의 반환값을 반환합니다.
  • 만약 fn이 전달되지 않았다면(else) 내부 함수인 sum을 호출합니다.

함수의 인자로 함수를 전달하는 일은 낯설지 않지만, calculator 함수의 내부 함수인 sum 함수는 아무 인자를 받지 않았음에도 변수 a와 b에 접근할 수 있습니다. 이처럼 내부 함수가 외부 함수의 지역변수에 접근할 수 있는 것을 클로저(Closure)라고 하며, 데코레이터와 같은 Python의 고급 개념들을 위해 필수적으로 사용됩니다.

+ Recent posts