부부의 코딩 성장 일기

데코레이터(Decorator) 본문

Python/Fundamentals

데코레이터(Decorator)

펩시_콜라 2024. 2. 19. 19:00

데코레이터란?

  • 파이썬에서 함수나 메소드를 감싸서 (Decorate하여), 특정 동작을 추가하거나 수정하는 기능을 말한다.
  • 데코레이터를 사용하게 되면 코드의 재사용성을 높이고, 코드를 간결하게 유지하는 것이 가능하다. 
  • 데코레이터는 일반적으로 내부에 다른 함수를 정의하고, 그 함수를 반환하는 형태로 구현이 되는데, 이런 구조는 클로저(Closure)라 불리는 개념을 기반으로 한다. 
  • 아래의 예제를 보면,
    • my_decorator라는 데코레이터 함수는 func이라는 인자를 받아, 그 함수를 감싸는 wrapper라는 함수를 정의하고, wrapper함수를 반환하고 있다. 
    • 이에 wrapper 함수는 클로저로써 외부함수(my_decorator)의 변수에 접근할 수 있다. 
    • @my_decorator와 같이 표시하면, 실제로는 say_hello 함수가 my_decorator 함수의 인자로 전달되어 내부에서 wrapper함수로 감싸지게 된다.
def my_decorator(func):
    def wrapper():
        print("데코레이터에서 추가하는 기능")
        func()
        print("데코레이터에서 추가하는 다른 기능")
    return wrapper

@my_decorator
def say_hello():
    print("안녕하세요!")

say_hello()

# 데코레이터에서 추가하는 기능
# 안녕하세요!
# 데코레이터에서 추가하는 다른 기능
  • 이처럼 데코레이터를 사용하게 되면, 기존 함수의 동작을 확장하거나 수정하는 것이 용이하며, 이는 코드의 가독성과 재사용성을 높여준다. 특히 함수나 메소드에 공통으로 적용되는 기능을 중앙에서 관리할 수 있게 해준다.