본문 바로가기

python

python @decorator에 대해서

데코레이터는 실행하려는 함수의 구조를 수정하지 않고 기존 객체에 새로운 기능을 추가 할 수 있도록 하는 기능이다.

def decorator(func):
  def wrapper(*args, **kwargs):
    print('전처리')
    print(func(*args, **kwargs))
    print('후처리')
  return wrapper

@decorator
def myFunc():
  return 'decorator test'

# 결과
# 전처리
# decorator test
# 후처리

decorator 함수명이 꼭 decorator 일 필요는 없다.

여러개의 decorator 함수를 생성하여 각각 다른 함수에 사용할 수 있다.

그럼 이제 decorator에 대해 알았다면 위 코드의 내용중에 전처리, 후처리에 대해서 알아보자

REST API에 대한 서버 로직을 작성한다면 전처리로 권한 및 인증 이러한 체크를 먼저 하고

가운데 함수 호출은 본 함수의 로직을 실행시키고

오류 같은 에러 사항들이 발생했을때 후처리를 합니다.

코드로 나타내면

# decorator
def decorator(func):
  def wrapper(*args, **kwargs):
    if checkLogin():  # 전 처리로 login check를 함
      func(*args, **kwargs)  # login check에서 문제가 없었다면 본 함수 로직 실행
    log()  # 이후 후처리로 log를 찍음으로써 마무리
  return wrapper

decorator를 사용한다고 코드의 성능이 나아지는건 아니지만 코드 유지보수가 편하다고 가독성이 높아지는 부분때문에 많이들 사용합니다.

(참고) 데코레이터는 하나 이상도 사용가능하다.