함수에 정수나 list 등의 자료형을 넣는 것은 굉장히 익숙하지만.. 함수의 인자로 '함수'가 들어간다면? 직접적으로 함수를 변수로서 담을 수도 있지만 가독성에 문제가 생길 수 있습니다. 이런 상황에서 decorator를 사용합니다.
데코레이터는 함수를 인수로 받아 새로운 기능을 추가한 뒤, 원래 함수 대신 반환합니다.
def my_decorator(func):
def wrapper():
print("기능을 추가합니다.")
func() # 원래 함수를 실행
print("추가 기능을 끝냅니다.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
# 사용 예시
say_hello()
# 출력:
# 기능을 추가합니다.
# Hello!
# 추가 기능을 끝냅니다.
이런식으로 데코레이터를 만들면, say_hello()함수말고 다른 함수에도 이 추가기능(지금 여기서는 '기능을 추가합니다.', '추가 기능을 끝냅니다.'라는 문자열을 출력하는 기능이죠)을 쉽게 부여할 수 있습니다. 데코레이터를 사용하고 함수만 바꿔치기 하면 되기 때문입니다.
데코레이터에 인자를 받아야할 경우도 있을텐데 이런 경우에는 아래와 같이 작성해주면 됩니다.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("함수 호출 전 추가 작업")
result = func(*args, **kwargs)
print("함수 호출 후 추가 작업")
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
# 사용 예시
print(add(3, 4))
# 출력:
# 함수 호출 전 추가 작업
# 함수 호출 후 추가 작업
# 7
'프로그래밍 > Python 관련 정보' 카테고리의 다른 글
[Python - Frequently Used Code] Escape 문자 (0) | 2024.11.03 |
---|---|
[Pythonic Programming] Staticmethod/Classmethod (3) | 2024.10.27 |
[Pythonic Programming] Property (0) | 2024.10.26 |
[Pythonic Programming] Context manager (0) | 2024.10.26 |
[Pythonic Programming] SOLID원칙 (1) | 2024.10.25 |