6. 데코레이터

Pywiki
(데코레이터에서 넘어옴)
둘러보기로 가기 검색하러 가기

1 개요[편집 | 원본 편집]

decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다.

함수를 수정하지 않고 추가기능을 넣고 싶을 때.

다음과 같이 사용한다.

def login(function):
    def wrapper(뷰에들어갈인자):
        print('로그인!')
        function(뷰에들어갈인자)
    return wrapper
    
@login
def view(뷰에들어갈인자):
    print('게시물 보기.')

login함수에 들어가는 함수가 데코레이터 아래 있는 함수가 된다. 즉, 상위함수인 login에서 일련의 과정을 처리한 후 아래의 view를 login함수 안에서 다룬다.

2 기초 사용법[편집 | 원본 편집]

의도 설명 방법
정의 함수 안에 함수를 넣는 방식으로 사용한다.
def 데코레이터이름(func):
    def wrapper():
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
        return 특정값
    return wrapper
인수와 함께 정의 데코레이터가 꾸며줄 함수가 받는 인수를 데코레이터에서도 받고 싶을 때.
def 데코레이터이름(func):   # 기존 합수를 인수로 받는다.
    def wrapper(*args, **kwargs):   # 데코레이터 역할. *args, **kwargs 매개변수 추가
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
        func(*args)  # 받은 함수의 결과값을 조작할 수도 있다.
        return 특정값
    return wrapper
적용 @로 꾸며준다.

여러개를 적용할 수도 있는데, 함수에서 가까운 데코레이터1부터 2 순으로 적용된다.

@데코레이터2(인수, ...)
@데코레이터1(인수, ...)
def 적용할함수(인수, ...)
    ...
    return ...

3 잘 안쓰는 방법[편집 | 원본 편집]

의도 설명 방법
상속 기존 데코레이터에 간단한 기능을 추가하여 사용하고 싶을 때.