파이썬 클로저(Closure)란? 간단한 예제와 활용법

안녕하세요. 잘산다 코딩입니다. 오늘은 파이썬 클로저에 대해 알아보겠습니다. 파이썬 클로저는 함수를 둘러싼 환경을 유지하고, 나중에 다시 사용할 수 있는 함수를 말합니다. 파이썬 클로저는 어떻게 만들고 사용하는지, 그리고 어떤 장점이 있는지 알아보겠습니다.

파이썬 클로저

파이썬 클로저란?

파이썬 클로저는 다음과 같은 조건을 만족하는 함수입니다.

  • 외부 함수에서 내부 함수를 정의하고 반환한다.
  • 내부 함수에서 외부 함수의 지역 변수를 사용한다.
  • 외부 함수의 실행이 끝나도 내부 함수에서 사용한 지역 변수가 사라지지 않는다.

예를 들어, 다음과 같은 함수가 있습니다.

이 함수는 외부 함수 outer_func에서 내부 함수 inner_func를 정의하고 반환합니다. 내부 함수 inner_func는 외부 함수의 지역 변수 ab를 사용하여 a * x + b라는 계산식을 반환합니다. 이때, x는 내부 함수의 매개변수이므로 지역 변수이고, ab는 내부 함수에서 정의되지 않은 변수이므로 자유 변수(free variable)라고 부릅니다.

이제 외부 함수를 호출하고 반환값을 변수에 저장해보겠습니다.

이렇게 하면 c에는 inner_func 함수 객체가 저장됩니다. 그리고 c에 숫자를 넣어서 호출해보면 a * x + b 계산식에 따라 값이 출력됩니다.

여기서 주목할 점은 외부 함수 outer_func의 실행이 끝났음에도 불구하고, 내부 함수 inner_func에서 사용한 지역 변수 ab가 사라지지 않고 계속 유지된다는 것입니다. 이렇게 함수를 둘러싼 환경(지역 변수, 코드 등)을 계속 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수를 클로저라고 합니다. 여기서는 c에 저장된 함수가 클로저입니다.

파이썬 클로저의 특징

  • 클로저는 함수의 반환값으로 함수를 사용할 수 있게 해줍니다. 즉, 함수를 일급 객체(first-class object)로 다룰 수 있습니다.
  • 클로저는 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용할 수 있습니다. 이렇게 하면 전역 변수를 줄일 수 있고, 코드의 가독성과 유지 보수성을 높일 수 있습니다.
  • 클로저에 속한 지역 변수는 외부에서 직접 접근할 수 없으므로 데이터를 숨기고 싶을 때 활용할 수 있습니다. 또한, 클로저의 지역 변수는 nonlocal 키워드를 사용하여 변경할 수 있습니다.

파이썬 클로저의 활용

파이썬 클로저는 다양한 상황에서 활용할 수 있습니다.

위 함수는 외부 함수 countdown에서 내부 함수 count를 정의하고 반환합니다. 내부 함수 count는 외부 함수의 지역 변수 i를 사용하여 i에서 1을 뺀 값을 반환합니다. 이때, i는 내부 함수에서 변경되므로 nonlocal 키워드를 사용합니다.

이제 외부 함수를 호출하고 반환값을 변수에 저장해보겠습니다.

이렇게 하면 c에는 count 함수 객체가 저장됩니다. 그리고 c를 반복해서 호출해보면 n부터 1씩 감소하는 값을 출력합니다.

실행 결과

이렇게 파이썬 클로저를 사용하면 카운트다운 기능을 구현할 수 있습니다. 이외에도 클로저는 데코레이터(decorator), 지연 평가(lazy evaluation), 커링(currying) 등에 활용됩니다.

마무리

이번 포스트에서는 파이썬 클로저에 대해 알아보았습니다. 파이썬 클로저는 함수를 둘러싼 환경을 유지하고, 나중에 다시 사용할 수 있는 함수입니다. 파이썬 클로저는 함수의 반환값으로 함수를 사용하고, 지역 변수와 코드를 묶어서 사용하고, 데이터를 숨기는 등의 장점이 있습니다. 이 외에 데코레이터는 클로저를 활용한 파이썬의 강력한 기능 중 하나인데 이미 데코레이터에 대해 설명한 글이 있으니 궁금하시다면 방문해주세요.

데코레이터 이외에 다른 유용한 코딩 정보가 궁금하시다면 블로그 메인을 방문해주세요. 감사합니다.

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다