[파이썬] 함수의 중첩과 데코레이터

Python에서는 함수의 중첩과 데코레이터라는 기능을 제공하여 코드의 재사용성과 가독성을 향상시킬 수 있습니다. 함수의 중첩은 하나의 함수 안에 다른 함수를 정의하는 것을 말하며, 데코레이터는 함수를 수정하거나 기능을 추가하는 역할을 합니다. 이러한 기능들을 적절히 활용하면 코드를 더욱 효율적으로 작성할 수 있습니다.

함수의 중첩

먼저, 함수의 중첩에 대해 알아보겠습니다. 함수의 중첩은 함수 안에 다른 함수를 정의하는 방법으로, 내부 함수는 외부 함수의 변수에 접근할 수 있습니다. 이를 통해 코드의 구조를 잘 나누고, 변수의 스코프 관리를 편리하게 할 수 있습니다.

def outer_func():
    x = 10
    
    def inner_func():
        print(x)
        
    inner_func()
    
outer_func()  # 출력: 10

위 예시에서 inner_funcouter_func 안에서 정의되었으며, 외부 함수인 outer_func의 변수 x에 접근하여 출력하고 있습니다. 함수의 중첩을 사용하면 변수를 전역으로 사용하지 않고도 필요한 범위에서 사용할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.

데코레이터

이제 데코레이터에 대해 알아보겠습니다. 데코레이터는 다른 함수를 수정하거나 기능을 추가하는 함수입니다. 주로 함수를 감싸서 추가적인 동작을 수행하거나, 함수의 호출 전후에 처리를 추가하는 용도로 사용됩니다. 데코레이터는 @ 기호를 사용하여 함수 위에 표시됩니다.

def decorator_func(func):
    def wrapper():
        print("Before function call")
        func()
        print("After function call")
        
    return wrapper

@decorator_func
def my_func():
    print("Inside my_func")

my_func()

위 예시에서 decorator_func는 데코레이터 함수로, wrapper 내부에서 추가적인 처리를 수행하고 있습니다. @decorator_func를 사용하여 my_func 함수 위에 데코레이터를 표시하였습니다. 따라서 my_func을 호출하면 데코레이터가 추가한 처리가 수행되며, 출력 결과는 다음과 같습니다.

Before function call
Inside my_func
After function call

데코레이터를 사용하면 코드의 재사용성과 모듈성을 높일 수 있습니다. 특히, 많은 함수에 공통적인 처리를 적용해야 할 때 데코레이터를 사용하면 코드의 중복을 줄이고, 유지보수성을 개선할 수 있습니다.

결론

Python의 함수의 중첩과 데코레이터 기능은 코드의 재사용성과 가독성을 향상시킬 수 있는 강력한 기능입니다. 함수의 중첩을 통해 코드를 모듈화하고 스코프를 관리할 수 있으며, 데코레이터를 사용하여 함수에 추가적인 처리를 쉽게 적용할 수 있습니다. 올바르게 활용하면 더욱 효율적이고 유지보수성이 높은 코드를 작성할 수 있습니다.