[Python] 데코레이터(Decorator)
2024. 1. 30. 19:30ㆍ카테고리 없음
1. 데코레이터(Decorator)
데코레이터(Decorator)는 함수나 메서드에 적용해, 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할을 합니다. 데코레이터는 일반적으로 @기호로 시작하고, 함수 위에 위치합니다. 데코레이터는 기본적으로 함수를 인자로 받고, 또 다른 함수를 반환하는 고차 함수입니다. 아래는 데코레이터가 사용된 예시입니다.
@st.cache_data # 데코레이터
def load_data(): #함수 선언
df=sns.load_dataset('iris')
return df
2.데코레이터 작동 원리
작동원리에 코드는 '레벨업 파이썬' [https://wikidocs.net/160127] 을 참고했습니다.
def hello():
print('hello')
hello()
위와 같이 함수를 선언하고 실행하면 아래와 같은 결과가 나옵니다.
hello
여기에 함수 기능을 추가하고 싶다면 함수를 수정하는 것도 좋지만 여러 함수에 동일한 기능이 추가 된다면 함수 하나하나 다 수정해줘야 한다는 번거로움이 존재합니다. 그래서 데코레이터를 만들고 함수의 기능을 추가해보겠습니다.
def deco(fn):
def deco_hello():
print('*'*20)
fn()
print('*'*20)
return deco_hello
그 이후 기존 함수에 데코레이터 함수가 추가된 함수로 대체해 주도록 합니다.
hello=deco(hello)
hello()
그러면 아래와 같은 결과가 나옵니다.
********************
hello
********************
앞선 1번에서 데코레이터는 @기호와 많이 쓰인다고 했습니다. 이번엔 @기호를 사용하여 데코레이터를 적용해보겠습니다.
@deco
def hello2():
print('hello 2')
hello2()
이번엔 새로운 함수 hello2를 선언하고 위에 데코레이터를 추가해주고 해당 함수를 호출하면 아래와 같이 데코레이터가 적용된 함수가 출력됩니다.
********************
hello 2
********************