이번 포스팅은 파이썬을 사용하면서
오픈소스를 사용하며 클래스나 함수에 나왔던 @ 를 이해하기 위한 정리 포스팅입니다.
1. @ 는 무엇인가?
@decorator_
def function():
print("what is this?")
오픈소스를 이용하여 파이썬을 이용할 때 @로 시작하는 것들을 볼 수 있습니다.
@는 데코레이터(decorator)로 장식하다의 decorate에 er(or)을 붙임으로 장식하는 도구로 설명할 수 있습니다.
어디에 장식하는 걸 까요?
데코레이터는 함수를 수정하지 않고 추가 기능을 구현할 때 사용합니다.
예를 들어 볼까요?
def func1():
print("func1 시작")
print("func1 실행")
print("func1 끝")
def func2():
print("func2 시작")
print("func2 실행")
print("func2 끝")
func1()
func2()
실행 결과
만약 정의된 함수가 많고 그 함수마다 시작과 끝을 알려줘야 한다면 함수를 만들 때마다 print 문을 넣어줘야 합니다.
이런 경우에 데코레이터를 사용하면 편리해집니다.
이번은 함수의 시작과 끝을 알려주는 데코레이터를 만들겠습니다.
def decorator1(func) :
def deco1() :
print(func.__name__, '함수 시작')
func()
print(func.__name__, "함수 끝")
return deco1
def func1():
print("func1 실행")
def func2():
print("func2 실행")
decorator_func1 = decorator1(func1)
decorator_func1()
decorator_func2 = decorator1(func2)
decorator_func2()
실행 결과
이렇게 함수를 정의하고 호출할 함수로 매개변수로 받아 같은 코드를 반복해서 사용할 수 있습니다.
2. @ 사용하기
앞서 했던 함수에 매개변수를 사용하여 반복되는 코드를 사용했다면
이제는 @를 사용하여 조금 더 간편하게 데코레이터를 사용해보겠습니다.
@를 사용하는 방법은 호출할 함수 위에 @데코레이터 형식으로 사용합니다.
def decorator1(func) :
def deco1() :
print(func.__name__, '함수 시작')
func()
print(func.__name__, "함수 끝")
return deco1
@decorator1
def func1():
print("func1 실행")
@decorator1
def func2():
print("func2 실행")
func1()
func2()
실행 결과
앞서 했던 것과 같은 결과를 조금 더 쉽게 얻을 수 있었습니다.
@데코레이터의 실행 과정을 그림으로 표현했습니다.
이렇게 데코레이터는 함수를 감싸는 형태로 되어있습니다. @데코레이터는 따라서 기존의 함수를 수정하지 않으면서
기능을 추가할 때 사용합니다.
물론 @데코레이터를 여러 번 사용하여 기능을 추가할 수도 있습니다.
이번 포스팅은 @데코레이터에 대해 정리해봤습니다.
틀린 부분이나 질문이 있으면 댓글로 남겨주세요
감사합니다 :)
'Python > Python 정리' 카테고리의 다른 글
[Python] 패킹(packing)과 언패킹(unpacking) (2) | 2021.06.26 |
---|---|
[Python] 리스트 컴프리헨션(List Comprehension) (0) | 2021.06.17 |
[Python] 가정 설정문 assert 정리 (0) | 2021.06.07 |
[Python] __call__ 함수 정리 (2) | 2021.06.06 |
[Python] *args와 **kwargs 정리 (0) | 2021.05.23 |