6. 데코레이터
둘러보기로 가기
검색하러 가기
1 개요[편집 | 원본 편집]
decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다.
함수를 수정하지 않고 추가기능을 넣고 싶을 때.
다음과 같이 사용한다.
def login(function):
def wrapper(뷰에들어갈인자):
print('로그인!')
function(뷰에들어갈인자)
return wrapper
@login
def view(뷰에들어갈인자):
print('게시물 보기.')
login함수에 들어가는 함수가 데코레이터 아래 있는 함수가 된다. 즉, 상위함수인 login에서 일련의 과정을 처리한 후 아래의 view를 login함수 안에서 다룬다.
2 기초 사용법[편집 | 원본 편집]
의도 | 설명 | 방법 |
---|---|---|
정의 | 함수 안에 함수를 넣는 방식으로 사용한다. | def 데코레이터이름(func):
def wrapper():
func.__name__ # 등의 속성을 이용하여 함수를 조작하는 등...
return 특정값
return wrapper
|
인수와 함께 정의 | 데코레이터가 꾸며줄 함수가 받는 인수를 데코레이터에서도 받고 싶을 때. | def 데코레이터이름(func): # 기존 합수를 인수로 받는다.
def wrapper(*args, **kwargs): # 데코레이터 역할. *args, **kwargs 매개변수 추가
func.__name__ # 등의 속성을 이용하여 함수를 조작하는 등...
func(*args) # 받은 함수의 결과값을 조작할 수도 있다.
return 특정값
return wrapper
|
적용 | @로 꾸며준다.
여러개를 적용할 수도 있는데, 함수에서 가까운 데코레이터1부터 2 순으로 적용된다. |
@데코레이터2(인수, ...)
@데코레이터1(인수, ...)
def 적용할함수(인수, ...)
...
return ...
|
3 잘 안쓰는 방법[편집 | 원본 편집]
의도 | 설명 | 방법 |
---|---|---|
상속 | 기존 데코레이터에 간단한 기능을 추가하여 사용하고 싶을 때. |