반응형

1. 데코레이터

클로저인데 인수가 함수인 부분이 차이가 있으며, 다양한 상황에서 동일한 기능을 수행하는 함수가 필요할 때 데코레이터를 만들어 사용하면 유리합니다.
일반적으로 로그를 남겨 redirecting 등 부차적 스테이지로 넘기거나, 함수의 실행시간, 메모리 점유시간 등을 확인하기 위한 용도로 많이 사용됩니다.

1.장점

  • 공통 함수 작성(로깅, 프레임워크, 유효성 체크 등 )을 통한 간결한 코드라인과 중복 제거
  • 조합 사용이 편리

2.단점

  • 가독성 좋지 못하고 디버깅이 이렵다.
  • 특정 기능에 한정된 함수는 단일 함수로 작성하는게 좋다

1) 사용법

def decorator_func(func):
    def wrap_func():
        return func()
    return wrap_func()

def target():
    print ("done")

example = decorator_func(target)
example
>> done

데코레이터는 기본적으로 클로저 형태입니다.

def decorator_func(func):
    def wrap_func():
        print('{} start'.format(func.__name__))
        return func()
    return wrap_func()

@decorator_func
def target1():
    print('target1 done')

@decorator_func
def target2():
    print('target2 done)

target1()
>>> target1 start
target2 done

target2()
>>> target2 start
target2 done

사용시에는 적용하고자 하는 함수 위에 @func_name 을 해주면 됩니다.

반응형
복사했습니다!