TIL 41. Decorator

Drageon Lee·2022년 3월 2일
0

TIL_Python

목록 보기
7/11

Today's topic

지난 번 Posting에서도 예고 했듯이 이번 posting에는 decorator에 대해 정리하고자 한다. 일급 함수를 바탕으로 지난 posting에서는 closure 함수에 대해 정리하였고 이번에는 decorator이다. 그럼 시작해보도록 하겠다.

👉 What is "Decorator"?

Decorator란 어떠한 함수를 인자로 받아 꾸며준 후 다시 함수로 return 하는 함수를 말한다.
꾸며준다는 의미는 함수의 앞, 뒤로 특정한 로직을 추가하는 행동을 의미한다.
따라서 decorator가 적용된 함수가 실행되기 전 decorator 함수가 먼저 실행이 된다.
단, decorator는 적용하는 함수 내부의 직접적인 수정이나 로직의 변환을 가할 수 없다.

Decorator는 closure함수와 비슷하나, 함수를 인자로 받는다는 차이가 있다.
형태는 적용하려는 함수 위에 @decorator 형태로 적용한다.

👉 Form of "Decorator"?

Decorator의 형태는 어떻게 될까?
위에서는 closure함수와 비슷하다고 하였고, 적용되는 함수의 위에 사용한다고 하였는데 예시 code를 통해 알아보고자 한다.

  • Form
def decorator(func):
	def wrapper_func(*args, **kwargs):
    	#추가 logic
        return func(*args, **kwargs)	# 꾸며질 func를 return
    return wrapper_func					# wrapper_func를 return
    
@decorator
def example():
	print("This is example code of decorator")
  • Example code
def decorator(func):
	def wrapper_func(*args, **kwargs):
    	print("This is first time to meet you")
        return func(*args, **kwargs)	# 꾸며질 func를 return
    return wrapper_func					# wrapper_func를 return
    
@decorator
def sayHello(name):
	print(f"Hello! {name}")

sayHello("Drageon")

#Result
This is first time to meet you
Hello! Drageon

위 형식과 같이 사용된다. 그럼 왜 Decorator를 사용할까? Decorator의 장, 단점에 대해서 알아보자

👉 "Decorator"의 장, 단점?

  • Decorator의 장점
    - Code 중복을 최소화하고 재사용성을 높일 수 있다.
    - 중복 된 code를 여러번 사용해야 할 경우 @decorator만 붙이면 되니 가독성 또한 높일 수 있다.
    - 로직에 수정이 필요할 때도 decorator 내용만 수정하면 된다.(각각의 함수를 수정할 필요 없음.)
  • Decorator의 단점
    - 중첩해서 사용 시 에러 발생시 디버깅이 어렵다.(에러의 발생 지점을 추적하기 어렵기 때문.)
    - 코드에 대한 이해가 없을 경우 가독성이 떨어진다.(안쓴것만 못할 수 있다.)

📖 출처 :

My opinion

이번 posting에서는 decorator에 대해 정리해 보았다. Decorator는 일급함수를 거치고 closure를 거친 좀 더 복잡한 내용이었던 것 같다. 하지만 파면 팔 수록 재미있다. 다음 posting에서는 generator에 대해 정리할 것이다.

profile
운동하는 개발자

0개의 댓글