@decorator

고준영·2021년 8월 10일
0

Python🐍

목록 보기
6/7
post-thumbnail

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주차 화요일

profile
코드짜는귤🍊 풀스택을 지향하는 주니어 개발자 입니다🧡

0개의 댓글