상세 컨텐츠

본문 제목

[Python] 데코레이터를 알기 위한 클로저

카테고리 없음

by AI Engineer crystal 2025. 2. 3. 16:07

본문

클로저 (Closure)

  • 함수 안의 함수를 결과로 반환할 때, 그 내부 함수를 클로저(Closure) 라고 합니다.
  • 사용되는 곳
    • 콜백(Callback) 함수에 사용
    • 함수의 순차적 실행
    • 데코레이터 함수

데코레이터 (Decorator)

  • decorate는 '꾸미다, 장식하다'라는 뜻으로 함수를 꾸며주는 함수.
  • 함수를 인수로 받는 클로저
  • @를 이용한 어노테이션으로 사용
  • 사용되는 곳
    • 반복되는 작업을 여러 함수에 적용할 경우
    • 기존 함수를 수정하지 않고 추가 기능을 구현하고 싶을 경우
import time


''' 실행 시간 측정 데코레이터 '''
def elapsed(func):                                     # 함수를 인풋으로 받는다.
    def wrapper(a, b):                                 # 함수 안의 함수 = 클로져
        print('함수가 실행됩니다.')
        start = time.time()
        result = func(a, b)                            # 함수 실행
        end = time.time()
        print("함수 수행시간: %f 초" % (end - start))  # 함수 수행시간
        return result                                  # 함수 실행 결과 반환
    return wrapper


@elapsed
def func1(a, b):
    val = a + b
    return val

@elapsed
def func2(a, b):
    val = a * b
    return val


if __name__ == "__main__":
    func1(1,2)
    func2(1, 2)

 

반복되는 작업을 여러 함수에 적용할 경우를 기준으로 강의를 보았습니다. 클래스를 사용하는 방법도 있고(def __call__(self, n):) 클로저를 사용하는 방법도 있습니다. 데코레이터가 파이썬을 공부하다보면 많이 보이는데 거슬러 올라가 기본 개념부터 배우게되어 이해가 더 잘되고 기억을 남길 수 있을 것 같습니다.