Web/web dev

파이썬 데코레이터: 이해와 활용 방법

hy30nq 2024. 6. 14. 16:25
728x90

안녕하세요! 😊 오늘은 파이썬의 강력한 기능 중 하나인 데코레이터에 대해 알아보려고 해요. 데코레이터는 코드의 재사용성을 높이고, 함수나 메서드의 동작을 수정할 수 있게 해주는 매우 유용한 도구랍니다. 예제와 함께 자세히 설명해드릴게요!

1. 데코레이터란?

데코레이터는 다른 함수를 수정하거나 확장하는 함수예요. 데코레이터를 사용하면 기존 함수에 새로운 기능을 추가할 수 있어요. 주로 함수의 전처리, 후처리 작업을 수행할 때 사용된답니다.

2. 데코레이터 기본 구조

먼저 간단한 예제를 통해 데코레이터의 기본 구조를 살펴볼게요.

def my_decorator(func):
    def wrapper():
        print("함수가 호출되기 전에 실행됩니다.")
        func()
        print("함수가 호출된 후에 실행됩니다.")
    return wrapper

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

say_hello()

위 코드는 say_hello 함수가 호출될 때, my_decoratorsay_hello를 감싸서 추가 기능을 수행하는 예제예요. 실행 결과는 다음과 같아요.

함수가 호출되기 전에 실행됩니다.
안녕하세요!
함수가 호출된 후에 실행됩니다.

3. 여러 데코레이터 사용하기

여러 데코레이터를 하나의 함수에 적용할 수도 있어요.

def first_decorator(func):
    def wrapper():
        print("첫 번째 데코레이터")
        func()
    return wrapper

def second_decorator(func):
    def wrapper():
        print("두 번째 데코레이터")
        func()
    return wrapper

@first_decorator
@second_decorator
def greet():
    print("안녕하세요!")

greet()

실행 결과는 다음과 같아요.

첫 번째 데코레이터
두 번째 데코레이터
안녕하세요!

4. 인자를 받는 데코레이터

인자를 받는 함수에도 데코레이터를 적용할 수 있어요.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("함수가 호출되기 전에 실행됩니다.")
        result = func(*args, **kwargs)
        print("함수가 호출된 후에 실행됩니다.")
        return result
    return wrapper

@my_decorator
def add(a, b):
    return a + b

print(add(3, 5))

이 경우, 데코레이터가 인자와 함께 함수의 동작을 변경할 수 있어요.

5. 클래스 메서드에 데코레이터 사용하기

클래스 메서드에도 데코레이터를 적용할 수 있어요.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("메서드 호출 전")
        result = func(*args, **kwargs)
        print("메서드 호출 후")
        return result
    return wrapper

class MyClass:
    @my_decorator
    def instance_method(self):
        print("인스턴스 메서드")

obj = MyClass()
obj.instance_method()

이 예제는 클래스의 인스턴스 메서드에 데코레이터를 적용한 예제예요.

결론

데코레이터는 코드의 재사용성을 높이고, 함수의 동작을 유연하게 수정할 수 있는 강력한 도구예요. 다양한 상황에서 활용할 수 있으니, 꼭 한 번 시도해보세요! 😊

728x90