실행하려는 method 데코레이터는 사용자가 구조를 수정하지 않고 기존 객체에
새로운 기능을 추가 할 수 있도록하는 python의 디자인 패턴이다.
먼저 간단한 예제로 이해해보자!
def decorator(func): def wrapper(*args, **kwargs): print('Hello!') # 전처리 print(func(*args, **kwargs)) print('GoodBye~') #후처리 return wrapper >> @decorator def myFunc(): return 'What is your name?'
위 코드의 실행 결과는 다음과 같다.
Hello! What is your name? GoodBye~코드에 작성한 주석을 살펴보면 decorator를 왜 쓰는지 가볍게 이해 할 수 있다.
예를 들어보자!
내가 만드는 서버에서 insertUser, deleteUser, updateUser라는 메소드가 있다고 했을 때
처리 순서는 다음과 같을 것이다.
- (전처리) 권한체크
- (본 로직) 요청에 대한 처리
- (후처리) 로그나 오류등등 처리

위와 같은 작업이 전,후로 반복된다.
이걸 데코레이터를 사용한다면 다음과 같다.

사실 성능이 나아지거나 하는건 없다.
하지만 시스템이 커질수록 관리하기 편하고, 런타임에 validation 하기 좋고(로깅 시)
소스코드 또한 주요 로직만 보게되니 가독성도 좋아진다.