Python에서 Decorator는 기존 함수를 수정하지 않고 그 기능을 확장하는 방법을 제공합니다. 즉, 기존 함수 위에 '장식'을 추가하는 것이라 생각하면 됩니다. Decorator는 '@' 기호를 사용하여 정의되며, 함수나 메소드 앞에 위치합니다.
한 가지 사례를 들어볼까요?
# decorator를 정의하는 함수. 인자로 함수를 받습니다.def my_decorator(func):
def wrapper():
print("함수 실행 전 무언가를 합니다..")
func()# 인자로 받은 함수를 실행합니다.print("함수 실행 후 무언가를 합니다.")
return wrapper
# @ + decorator 함수명을 앞에 쓰는 사용할 수 있습니다.@my_decorator
def say_hello():
print("Hello!")
say_hello()
위 예제에서, my_decorator는 decorator이며 say_hello 함수 앞에 '@' 기호와 함께 위치하고 있습니다. 이를 통해 say_hello 함수는 my_decorator에 인자로 넘겨되며, 함수가 호출 전후에 decorator 내에 정의된 추가 기능이 실행됩니다. 위에서는 func 전후에 print를 실행하겠군요.
위 코드를 한 번 실행해 보겠습니다.
decorator 실행 결과
Decorator는 다양한 케이스에 사용됩니다. 아래는 실제 사례를 모아보았습니다.
Python에서는 다양한 Decorator가 제공되며, 이들은 실제 코드에서 널리 사용됩니다. 예를 들어, Flask 웹 프레임워크에서는 라우팅을 위한 '@app.route'라는 Decorator를 제공합니다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
위 코드에서 '@app.route'는 URL 경로를 함수에 연결하는 역할을 합니다. 이를 통해 Flask 애플리케이션은 특정 URL 요청이 들어올 때, 해당 URL에 연결된 함수를 실행할 수 있습니다.