[파이썬] 데코레이터의 개념과 사용법

데코레이터는 파이썬에서 함수나 클래스를 수정하지 않고 기능을 추가할 수 있는 강력한 도구입니다. 데코레이터를 사용하면 코드의 가독성과 재사용성을 향상시킬 수 있으며, 코드를 깔끔하게 유지할 수 있습니다.

데코레이터란?

데코레이터는 다른 함수를 감싸서 추가적인 기능을 제공하는 함수입니다. 이를테면, 함수의 실행 전, 후에 로그를 출력하거나, 인자를 검증하는 등의 작업을 수행할 수 있습니다. 데코레이터는 함수를 반환하는 고차 함수로 구현됩니다.

데코레이터의 사용법

데코레이터는 @ 기호를 사용하여 함수 위에 작성됩니다. 데코레이터는 원래 함수를 인자로 받아, 데코레이팅된 함수를 반환하는 형태입니다. 다음은 간단한 데코레이터의 예시입니다.

def decorator_function(original_function):
    def wrapper_function():
        print("데코레이터 작업을 수행합니다.")
        return original_function()
    return wrapper_function

@decorator_function
def my_function():
    print("원래 함수입니다.")

my_function()

위의 예시에서 decorator_function은 원래 함수를 감싸는 함수입니다. wrapper_function은 데코레이팅된 함수로, 추가적인 기능을 수행한 뒤 원래 함수를 호출합니다. @decorator_functionmy_function을 데코레이터로 감싸는 구문입니다.

위 코드를 실행하면 다음과 같은 출력이 나타납니다.

데코레이터 작업을 수행합니다.
원래 함수입니다.

데코레이터는 여러 개를 연속적으로 사용할 수도 있습니다. 데코레이터는 위에서 아래로 작성된다는 것을 유념하며 사용해야 합니다. 예를 들어 다음과 같은 코드를 고려해봅시다.

def first_decorator(original_function):
    def wrapper_function():
        print("첫 번째 데코레이터 작업을 수행합니다.")
        return original_function()
    return wrapper_function

def second_decorator(original_function):
    def wrapper_function():
        print("두 번째 데코레이터 작업을 수행합니다.")
        return original_function()
    return wrapper_function

@first_decorator
@second_decorator
def my_function():
    print("원래 함수입니다.")

my_function()

위 코드를 실행하면 다음과 같은 출력이 나타납니다.

첫 번째 데코레이터 작업을 수행합니다.
두 번째 데코레이터 작업을 수행합니다.
원래 함수입니다.

두 개의 데코레이터가 순서대로 적용되고, 원래 함수가 호출됩니다.

데코레이터는 매우 유용하며, 파일 로그, 시간 측정, 인증 등 다양한 기능을 추가할 수 있습니다. 파이썬에서 많은 내장된 데코레이터도 제공되며, 필요에 따라 직접 데코레이터를 생성하여 사용할 수도 있습니다.

데코레이터의 개념과 사용법을 알아봤습니다. 이를 통해 코드를 더욱 모듈화하고, 기능을 확장하기 쉽게 만들 수 있습니다. 데코레이터는 파이썬 개발에서 매우 유용한 도구 중 하나이므로, 적극적으로 활용해보시길 추천드립니다!