글 개요
함수를 만들어 기능을 구현하고, 함수 내용을 변경하고 싶을 때 사용하는 decorator를 알아 봅시다.
글 본문
Python decorator 패턴은 함수의 객체와 함수를 변경하는 다른 객체를 Wrapping를 해주는 패턴입니다.
쉽게 생각해보자면, 데코레이터는 기존에 구현한 함수를 꾸며주는 역할을 해주는 것 입니다.
예시)
저는 회사 내 브랜드 이름을 100개를 만들어주는 프로그램 만들어 보라는 특별한 업무를 받았습니다. 저는 그래서 각 브랜드 이름 마다 다르게 디자인 하고, 이름도 넣고 해당 브랜드 명을 만들게 된 이유도 출력해줄 수 있게 100개 함수를 만들었습니다.
함수를 다 만들고 보니, 해당 브랜드 명은 @@에 저작권이 있습니다를 호출해주는 print문을 넣지 않았다는 것을 알게 되었습니다.
이걸 함수마다 다 다르게 넣어주는 건 무리라고 판단했습니다. 여기서 사용할 수 있는게 데코레이터 패턴입니다.
def hello_company():
print(f"Hello name: company name")
def hello_company_brand1():
print(f"Hello name: company name")
def hello_company_brand2():
print(f"Hello name: company name")
def hello_company_brand3():
print(f"Hello name: company name")
def hello_company_brand4():
print(f"Hello name: company name")
def hello_company_brand5():
print(f"Hello name: company name")
....
.
....
....
...
Decorator적용 후
# decorator
def copyright_company(func):
def attach_company_logo():
print("해당 브랜드 로고는 ~~~ 회사에 저작권이 있습니다")
func()
return attach_company_logo()
@copyright_company
def hello_company():
print(f"Hello name: company name")
@copyright_company
def hello_company_brand1():
print(f"Hello name: company name")
@copyright_company
def hello_company_brand2():
print(f"Hello name: company name")
@copyright_company
def hello_company_brand3():
print(f"Hello name: company name")
@copyright_company
def hello_company_brand4():
print(f"Hello name: company name")
@copyright_company
def hello_company_brand5():
print(f"Hello name: company name")
'Python' 카테고리의 다른 글
Python 매직메서드인 __getitem__과 __setitem__을 이용해 클래스를 딕셔너리나 리스트처럼 이용해보자. (0) | 2022.03.09 |
---|---|
파이썬 - 패키지 (0) | 2021.10.11 |
파이썬 - 전역변수 __name__ (0) | 2021.10.11 |
파이썬 - 모듈 (0) | 2021.10.11 |
파이썬 - 다양한 함수 (0) | 2021.10.11 |
댓글