Archive/Python
@decorator
mandarinko
2022. 2. 28. 16:16
1. Justies decorator
A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure.
데코레이터란 기존에 존재하는 구문을 수정하지 않고, 새로운 기능을 추가하게 해주는 것
2. What is decorator
- Study with example
def main_function():
print "MAIN FUNCTION START"
라는 코드가 있다고 해보자 이러한 함수에 앞뒤로 현재 시간을 출력하는 함수를 추가하려고 하면
import datetime
def main_function():
print datetime.datetime.now()
print "MAIN FUNCTION START"
print datetime.datetime.now()
이렇게 추가해야 할 것이다.
위의 함수를 여러번 수행해야 한다면 소스의 코드도 매우 길어질 것이며, 가독성 또한 떨어질 것이다.
이때! Decorator을 사용하게 되는데
Decorator을 사용한 코드를 살펴보자
import datetime
def datetime_decorator(func):
def decorated():
print datetime.datetime.now()
func()
print datetime.datetime.now()
return decorated
@datetime_decorator
def main_function_1():
print "MAIN FUNCTION 1 START"
datetime_decorator라는 Decorator을 선언해주고 수행하려고 하는 func를 받아온다.
이후 원래 수행하려고 했던 func 앞뒤로 수행 할 기능들을 작성해주면 된다
- func -> decorator은 원래 수행하려고 했던 함수를 인자로 받는다
- decorated -> 선언 한 decorator함수 안에 decorator 역할을 해주는 decorated 함수를 nested function으로 선언
- nested function return
- decorator 함수는 원래의 함수기능안으로는 끼어들 수 없고 앞 뒤로 꾸며주는 기능을 한다.
- decorator 함수를 여러개 사용하면
import datetime
def datetime_decorator2(func):
def decorated():
print ("*" *30)
func()
print ("*" *30)
return decorated
def datetime_decorator(func):
def decorated():
print datetime.datetime.now()
func()
print datetime.datetime.now()
return decorated
@datetime_decorator2
@datetime_decorator
def main_function_1():
print "MAIN FUNCTION 1 START"
- 이렇게 두번 사용했다고 생각하면
******************************
{현재시간}
MAIN FUNCTION 1 START
{현재시간}
******************************
위와 같은 출력을 확인 할 수 있다(datetime_decorator2는 datetime_decorator을 꾸며주는 Decorator 함수)
3. conclusion
막상 장고에서 사용하던 여러가지 이해가 가지 않던 함수들을 알게되다보니 조금 더 장고에 대해 알게 되고, 더 많은 기능을 사용 할 수 있을것 같다. JS공부를 할 때에도 모르는 함수나 구문? 이 있다면 MDN을 꼭 활용해서 이해하고 넘어가면 조금 더 빠르고, 정확한 성장을 할 수 있을것 같음
느리더라고 정확하게 성장하자🔥
20.08.10 위코드2주차 화요일