Closure
Decorator (데코레이터)
함수 안의 함수를 결과로 반환할 때, 그 내부 함수를 closure 라고 함
주로 콜백 함수나 데코레이터 함수 또는 함수를 순차적으로 실행할 때 주로 사용
Python 예제
특정 정수를 곱하는 값을 return 해주는 함수를 만듦
def mul_3(n):
return n * 3
def mul_5(n):
return n * 5
mul_6, mul_7, … 등의 함수들도 필요할 때 하나하나 만들어주면 효율적이지 못함
이럴 때 아래와 같이 class로 구현을 할 수도 있지만
class Mul:
def __init__(self, m):
self.m = m
def __call__(self, n): # 객체가 호출이 될 때 자동 실행되는 함수
return self.m * n
Closure를 사용하여 아래와 같이 구현할 수도 있음
def mul(m): # 외부 함수
def wrapper(n): # 내부 함수 (closure)
return m * n
return wrapper
mul_3 = mul(3) # m = 3인 wrapper 함수가 mul_3에 저장
mul_5 = mul(5) # m = 5인 wrapper 함수기 mul_5에 저장
print(mul_3(10))
print(mul_5(10))
결과는 아래와 같음
30
50
Closure를 잘 사용하면 재사용성이 높은 함수 구조 구현 가능