Python-Decorator

강현구·2021년 12월 2일
0

Python

목록 보기
12/21

Decorator

Decorator : (사전적인)장식 또는 장식하는 사람(도구)을 의미한다.
예를 들어 주식 정보를 제공해주는 jackpot_stock_information함수를 만든다고 생각해보자.
이 정보를 아무에게나 주는 것이 아니라 인증된 사람에게만 보내기 위해 확인하는 is_paid_user함수를 통해 대상인증을 한다고 하자.
그러면 jackpot_stock_information함수가 호출되기 전 항상 is_paid_user함수를 먼저 호출해야 할 것이다.

코드가 길어질 수록 이 연결고리를 잊고 jackpot_stock_information함수만 단독적으로 사용할 가능성이 높아진다. 따라서 jackpot_stock_information함수를 호출할 때 알아서 자동으로 is_paid_user함수를 호출되게 하는 방법이 바로 decorator이다.

decorator는 함수 정의 바로 위에 '@'와 대상 함수를 붙여 달아 놓는다.
이때, decorator로 쓰이는 함수는 중첩 함수를 리턴하는 함수만 사용할 수 있다.
왜냐하면, 마지막 함수를 제외한 함수들은 다음 함수를 리턴해주어야 함수들을 차례대로 호출할 수 있기 때문이다.
Decorator: chain of functions
만일 다음 함수를 리턴하지 않고 다른 값을 리턴해버리면 그 다음 함수로 넘어가지 못하고 그냥 함수가 종료된다.

아래처럼 함수를 만들 수 있다.

def is_paid_user(func):
    user_paid = True # 간단화 하기 위해 무조건 True

    def wrapper(*args, **kwargs):
        if user_paid:
            func() 
        else:
            return

    return wrapper
    
@is_paid_user
def jackpot_stock_information():
    return "계시가 내려졌습니다. 삼성전자를 사세요!"

decorator

profile
한걸음씩

0개의 댓글