본문 바로가기
Python

Python Decorator를 사용해서 기존함수를 변경해보자.

by 앵남(Andy) 2022. 7. 24.

글 개요 

함수를 만들어 기능을 구현하고, 함수 내용을 변경하고 싶을 때 사용하는 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")

 

 

댓글