말 그래로 기존의 함수에 약간의 첨가를 할 때 사용한다.
예를 들어보자.
name을 input으로 받으면, 포매팅 문자열로 넣어서 반환해주는 함수이다.
def greet(name):
return f"Hello, {name}!"
print(greet("Alice"))
output: Hello, Alice
그런데 이러한 함수가 100가지가 되고,
모든 함수의 output을 대문자로 바꾼다고 생각해보자.
그러면 위의 함수는 다음과 같이 바꿔야한다.
def greet(name):
return f"HELLO, {name.upper()}!"
print(greet("Alice"))
Hello -> HELLO
name -> name.upper()
이렇게 바꾸는 과정을 100번 해야한다.
그렇다면, 함수를 만들어서 재정의하는 건 어떨까?
def uppercase(func):
def wrapper(text):
result = func(text)
return result.upper()
return wrapper
def greet(name):
return f"Hello, {name}!"
greet = uppercase(greet)
print(greet("Alice"))
이렇게 하면 이전의 방법보다는 편하지만, 결국 재정의 과정을 100번해야한다.
(greet = uppercase(greet))
더 편한 방법이 없을까?
이럴때 사용하는 방법이 decorator pattern이다.
def uppercase_decorator(func):
def wrapper(text):
result = func(text)
return result.upper()
return wrapper
@uppercase_decorator
def greet(name):
return f"Hello, {name}!"
print(greet("Alice"))
재정의하고자 하는 함수 바로위에, @재정의함수를 사용하면 된다.
끝
'섭섭의 공부 > Programming' 카테고리의 다른 글
vscode 가상환경 설정 및 사용 방법 (venv, pip) (0) | 2024.01.04 |
---|