데코레이터는 실행하려는 함수의 구조를 수정하지 않고 기존 객체에 새로운 기능을 추가 할 수 있도록 하는 기능이다.
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를 사용한다고 코드의 성능이 나아지는건 아니지만 코드 유지보수가 편하다고 가독성이 높아지는 부분때문에 많이들 사용합니다.
(참고) 데코레이터는 하나 이상도 사용가능하다.
'python' 카테고리의 다른 글
python 내장함수 sort(), sorted() (0) | 2021.06.26 |
---|---|
python json 모듈로 json 데이터 다루기 (0) | 2021.06.20 |
python 추상 클래스(abstract class) (0) | 2021.06.08 |
python 객체지향 프로그래밍 SOLID 설계원칙 (0) | 2020.10.26 |
python 객체지향 개발 4가지 특성 (0) | 2020.10.19 |