파이썬에서 데코레이터란 무엇일까요? 데코레이터(decorator)의 뜻은 '장식하다'인데요. 파이썬에서는 함수에 특정한 기능을 추가할 때 사용합니다. 데코레이터는 조금 복잡하지만 이를 통해 기존 함수를 수정하지 않고도 다른 함수의 기능을 추가할 수 있다는 장점이 있습니다.
데코레이터 예시
예시를 통해 살펴보도록 하겠습니다. 다음과 같이 Hello, World!
를 출력하는 함수가 있습니다. 해당 함수를 수정하지 않고 전후에 특정 문자를 추가하려면 어떻게 할 수 있을까요?
def greeting():
return "Hello, World!"
print(greeting())
# "Hello, World!"
다음과 같이 데코레이터를 사용할 수 있습니다. 데코레이터는 이를 덧붙이려는 함수 앞에서 @functionName
방식으로 사용합니다.
def additionalWords(func):
def wrapper():
return "**** " + func() + " ****"
return wrapper
@additionalWords
def greeting():
return "Hello, World!"
print(greeting())
# **** Hello, World ****
데코레이터 개념 설명
데코레이터의 개념을 이해하려면 중첩 함수와 클로저를 이해해야 합니다.
- 중첩 함수: 함수 내에 또다른 함수가 있는 것.
- 클로저: 중첩 함수가 부모 함수의 변수나 정보를 가두어 사용하는 것으로 부모 함수는 중첩 함수를 리턴.
데코레이터는 클로저를 활용한 개념으로 1. 부모 함수가 중첩 함수를 리턴하며 2. 다른 함수보다 먼저 실행되는 특징을 갖습니다.
이전 예시의 데코레이터는 기능적으로 아래의 코드와 동일합니다.
데코레이터를 사용하면 이를 다른 변수에 할당하지 않고도 실행할 수 있으며, 코드 길이를 줄이고 가독성 또한 높일 수 있습니다.
def additionalWords(func):
def wrapper():
return "**** " + func() + " ****"
return wrapper
def greeting():
return "Hello, World!"
f = additionalWords(greeting)
print(f())
# **** Hello, World ****
데코레이터 정리
이상을 통해 살펴본 데코레이터의 특징을 다시 한 번 정리해보면 다음과 같습니다.
- 부모 함수는 중첩 함수를 리턴한다.
- 최종 리턴되는 함수는 데코레이터가 붙어 있는 함수(또는 클래스)다.
- 이를 통해 기존 함수를 수정하지 않고 다른 함수의 기능을 추가할 수 있다.
- 데코레이터 함수를 만들어 인증, 인가에도 사용할 수 있다.
반응형
'Python' 카테고리의 다른 글
파이썬 클래스와 self 설명 (0) | 2022.01.21 |
---|---|
파이썬 패키지 정리 (0) | 2022.01.12 |
파이썬 모듈 사용 방법 정리 (0) | 2022.01.12 |
파이썬 List, Tuple, Set, Dictionary 차이점 정리 (0) | 2022.01.03 |
파이썬 함수와 파라미터 전달 방법 및 순서 (0) | 2022.01.03 |