본문 바로가기

Programming/Python

[Python] Decorator 개념 간단히 알아보기

반응형

데코레이터란 특정 함수를 Wrapping 후 추가적으로 기능을 추가하고 새로운 함수를 작성하는 역할

⇒ 공통으로 호출되는 함수를 작성하거나 특정 함수의 전, 후에 실행가능한 기능을 추가하는 것

⇒ 보통 로깅, 공통 데이터 처리, 테스트 기능 작성 등에 활용되고 있다.

예제

smile, angry, love 함수가 있다. 이 함수들에 각각 저작권을 부여하고 싶다고 가정하자.

1. Decorator를 사용하지 않을 경우

def smile():
    print("저작권 : Nyyang")
    print("smile")

def angry():
    print("저작권 : Nyyang")
    print("angry")

def love():
    print("저작권 : Nyyang")
    print("love")


angry()
smile()
love()

# 출력
저작권 : Nyyang
angry
저작권 : Nyyang
smile
저작권 : Nyyang
love

이렇게 각각의 함수마다 print 문을 추가로 작성해야 한다.

이렇게 작성해도 무방하지만 만약 수십 ~ 수백개의 메서드마다 저작권을 부여해야 한다면 좀 불필요한 라인들이 추가될 것으로 예상된다.

 

2. Decorator을 사용할 경우

데코레이터 함수를 작성 후 '@copyright'를 각 함수 위에만 정의해두면 모든 함수에 공통적으로 사용할 수 있게 된다.

# decorator
def copyright(func):
    def new_func():
        print("저작권: Nyyang")
        func()

    return new_func

@copyright
def smile():
    print("smile")

@copyright
def angry():
    print("angry")

@copyright
def love():
    print("love")

angry()
smile()
love()

smile 함수를 호출한다고 가정해보면 아래와 같은 흐름으로 데코레이터가 동작할 것이다.

  1. smile 함수 호출
  2. 위의 copyright 데코레이터가 있음을 확인 후 copyright() 함수 호출
  3. return new_func를 통해 new_func 함수를 호출하게 된다.
  4. 저작권: Nyyang을 출력
  5. func()에 인자 값으로 받은 smile() 함수를 여기서 호출
  6. 종료

 

마무리

데코레이터는 공통 실행 함수의 작성을 통한 전체에서 실행되는 모듈의 기능을 쉽게 지원할 수 있도록 해준다.

 

=> 공통 실행

 

 

 

 

 

 

 

 

 

 

반응형