Decorator는 closure처럼 중첩함수를 리턴하는 함수 이며 다른 함수에 적용해서, 적용된 함수가 실행되기 전에 무조건 실행됩니다. 즉 특정 함수를 실행하기 전에 강제적으로 다른 함수가 먼저 실행된후 실행되도록 하는 강제성을 제공하는 기능입니다.
예제
greeting 함수에 적용될 decorator 함수를 구현하여 greeting 함수에 적용해주세요.
Greeting 함수가 호출 되었을때 decorator 함수에 parametor 값이 greeting 함수 리턴값의 다음에 붙혀져서 리턴되어야 합니다. Decorator 함수의 이름은 name_decorator 여야 합니다.
예를 들어, 다음 처럼 정의 하여 name_decorator decorator에 "정우성"을 parameter로 적용하여 greeting을 호출하면:
@name_decorator("정우성")
def greeting():
return "Hello, "
greeting()
결과값은 다음과 같아야 합니다.
"Hello, 정우성"
def name_decorator(param):
def real_decorator(func):
def wrapper():
result = func() + param
return result
return wrapper
return real_decorator
@name_decorator("이예린")
def greeting():
return "Hello, "
greeting()
먼저, name_decorator 라는 함수를 만들고 데코레이터가 사용할 매개변수 param을 지정한다. 그리고 name_decorator 함수 안에 실제 데코레이터 역할을 할 real_decorator 함수를 만든다. 즉, 이 함수에서 호출할 함수를 매개변수로 받는다. 그다음에 real_decorator 안에 wrapper함수를 만들어준다.
wrapper 함수 안에서는 먼저 func의 결과를 확인한다. 그다음에 func의 반환값을 반환한다. 여기서는 real_decorator, wrapper 함수를 두 개 만들었으므로 함수를 만든 뒤에 return으로 두 함수를 반환해준다. 데코레이터를 사용할 때는 데코레이터에 ( )(괄호)를 붙인 뒤 인수를 넣어주면 된다.