[python] Decorator

1yangsh·2021년 7월 21일
0

Decorator

  • 함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
  • 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
  • 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을때 사용을 한다.
  • 또한 데코레이터를 이용해, 반복을 줄이고 메소드나 함수의 책임을 확장한다

아래와 같이 간단한 함수를 정의한 코드가 있다고 하자

def func1():
    print("Hello world!")
    print()
    
def func2():
    print("Hello everyone!")
    print()
    
    
def func3():
    print("Here is Korea!")
    print()
    
    
func1()
func2()
func3()

출력
Hello world!
Hello everyone!
Here is Korea!

각각의 함수에 출력전, 후 날짜와 시간을 출력하고 싶다면?

import datetime

def func1():
	print(datetime.datetime.now())
    print("Hello world!")
    print(datetime.datetime.now())
    print()
    
def func2():
    print(datetime.datetime.now())
    print("Hello everyone!")
    print(datetime.datetime.now())
    print()
    
    
def func3():
    print(datetime.datetime.now())
    print("Here is Korea!")
    print(datetime.datetime.now())
    print()

단순히 이렇게 반복해도 된다.

하지만 함수가 엄청 많아진다면? 직접 추가하는 것은 매우 번거로운 일이다

이를 도와줄 수 있는게 Decorator이다.

위의 단순 작업을 decorator로 처리한 아래 예제를 보자

import datetime

def datetime_decorator(func):
    def decorated():
        print("Start!")
        func()
        print(datetime.datetime.now())
        print()
    return decorated

@datetime_decorator
def func1():
    print("Hello world!")

@datetime_decorator
def func2():
    print("Hello everyone!")
    
@datetime_decorator
def func3():
    print("Here is Korea!")
    
    
func1()
func2()
func3()

출력
Start!
Hello world!
2021-07-21 10:55:40.304144
Start!
Hello everyone!
2021-07-21 10:55:40.304282
Start!
Here is Korea!
2021-07-21 10:55:40.304495

reference

  • https://bluese05.tistory.com/30
profile
배운 것을 기록합니다 :)

0개의 댓글