반응형
데코레이터란 특정 함수를 Wrapping 후 추가적으로 기능을 추가하고 새로운 함수를 작성하는 역할
⇒ 공통으로 호출되는 함수를 작성하거나 특정 함수의 전, 후에 실행가능한 기능을 추가하는 것
⇒ 보통 로깅, 공통 데이터 처리, 테스트 기능 작성 등에 활용되고 있다.
예제
smile, angry, love 함수가 있다. 이 함수들에 각각 저작권을 부여하고 싶다고 가정하자.
1. Decorator를 사용하지 않을 경우
def smile():
print("저작권 : Nyyang")
print("smile")
def angry():
print("저작권 : Nyyang")
print("angry")
def love():
print("저작권 : Nyyang")
print("love")
angry()
smile()
love()
# 출력
저작권 : Nyyang
angry
저작권 : Nyyang
smile
저작권 : Nyyang
love
이렇게 각각의 함수마다 print 문을 추가로 작성해야 한다.
이렇게 작성해도 무방하지만 만약 수십 ~ 수백개의 메서드마다 저작권을 부여해야 한다면 좀 불필요한 라인들이 추가될 것으로 예상된다.
2. Decorator을 사용할 경우
데코레이터 함수를 작성 후 '@copyright'를 각 함수 위에만 정의해두면 모든 함수에 공통적으로 사용할 수 있게 된다.
# decorator
def copyright(func):
def new_func():
print("저작권: Nyyang")
func()
return new_func
@copyright
def smile():
print("smile")
@copyright
def angry():
print("angry")
@copyright
def love():
print("love")
angry()
smile()
love()
smile 함수를 호출한다고 가정해보면 아래와 같은 흐름으로 데코레이터가 동작할 것이다.
- smile 함수 호출
- 위의 copyright 데코레이터가 있음을 확인 후 copyright() 함수 호출
- return new_func를 통해 new_func 함수를 호출하게 된다.
- 저작권: Nyyang을 출력
- func()에 인자 값으로 받은 smile() 함수를 여기서 호출
- 종료
마무리
데코레이터는 공통 실행 함수의 작성을 통한 전체에서 실행되는 모듈의 기능을 쉽게 지원할 수 있도록 해준다.
=> 공통 실행
반응형
'Programming > Python' 카테고리의 다른 글
[Boto3] RDS의 Parameter Group 값을 CSV 추출 스크립트 (0) | 2021.08.23 |
---|---|
[Python] Boto3로 Security Group rule 추가 (csv 파일 이용) (3) | 2021.08.14 |
[Python] 객체지향에서 필수 개념인 Property, Getter, Setter 간단히 알아보기 (0) | 2021.07.10 |
[Python] 정규 표현식 정리 #1 - 기초 (2) | 2021.07.08 |
[Python] 이터레이터, 제너레이터 개념 (0) | 2021.07.08 |