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를 잘 사용하면 재사용성이 높은 함수 구조 구현 가능



카테고리:

업데이트: