[파이썬] 클로저와 데코레이터 개념과 예제

클로저(Closure)와 데코레이터(Decorator)는 파이썬에서 함수와 함수의 동작을 확장하고 수정하는 데 사용되는 중요한 개념입니다. 아래에서 각각의 개념과 예제를 살펴보겠습니다.

클로저(Closure):

클로저는 함수 내부에서 정의된 함수로, 이 내부 함수는 외부 함수의 변수를 “포착”하고 저장합니다. 이러한 내부 함수는 외부 함수가 호출되지 않은 상태에서도 외부 함수의 변수에 접근할 수 있습니다.

예제 1: 클로저

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

closure = outer_function(10)
result = closure(5)
print(result)  # 출력: 15

이 예제에서 inner_functionouter_function 내에서 정의되었으며, x를 포착하고 저장한 후에도 outer_function이 종료된 후에도 호출할 수 있습니다. 이것이 클로저의 핵심 개념입니다.

데코레이터(Decorator):

데코레이터는 함수 또는 메서드를 수정하거나 확장하기 위해 사용됩니다. 데코레이터는 기존 함수를 취해서 새로운 함수를 반환하며, 이를 통해 함수의 동작을 변경할 수 있습니다.

예제 2: 데코레이터

def my_decorator(func):
    def wrapper():
        print("데코레이터 전에 수행하는 코드")
        func()
        print("데코레이터 후에 수행하는 코드")
    return wrapper

@my_decorator
def say_hello():
    print("안녕하세요!")

say_hello()

my_decorator 함수는 wrapper 함수를 정의하고, 이 wrapper 함수는 func 함수를 실행하기 전과 후에 메시지를 출력합니다. @my_decorator 데코레이터를 사용하여 say_hello 함수를 감싸서 데코레이터의 동작을 추가합니다.

결과:

데코레이터 전에 수행하는 코드
안녕하세요!
데코레이터 후에 수행하는 코드

데코레이터를 사용하면 함수의 동작을 수정하거나 확장하기 위해 중복 코드를 방지할 수 있으며, 코드의 가독성을 높일 수 있습니다. 이러한 기능은 웹 애플리케이션 프레임워크, 로깅, 인증 등 다양한 상황에서 유용하게 사용됩니다.