수많은 데코레이터 설명 중 그나마 이해가 잘된 함수에서 코드르 바꾸지 않고 추가/수정하고 싶을 때 사용하는 문법
으로 이미 선언한 함수를 변경하지 않고 내용 위에 붙여쓰기를 통해 간편하게 사용할 수 있다.
▽ 아래 코드를 보면 a 함수와 b함수 내 중복되는 함수(funcA, funcC
) 가 동일하게 사용되니 데코레이터를 사용하면 어떨까?
def a():
funcA()
funcB()
funcC()
def b():
funcA()
funcD()
funcC()
그래서 나는 데코레이터를 아래와 같이 사용할 계획이다.
중복코드를 재사용
을 줄이려는 경우.▼ def C()
함수는 데코레이터 def a(), def b()
는 데코레이팅 된 함수 or 래핑된 객체라고 부른다.
def c(func):
def wrapper(*args **kwargs):
funcA
result = func(*args **kwargs)
funcC
return result
return wrapper # ← 데코레이터 return 함수
@c # ← 데코레이터 선언 @c
def a():
funcB
@c # ← 데코레이터 선언 @c
def b():
funcC
getPost
함수가 있고 게시글에 접근하려 한다.
'''
함수명: getPost
기능: 게시글 내용 불러오기
'''
def getPost(writer, subject, context):
...
auth_verify
데코레이터를 선언한다.
'''
auth_verify 데코레이터
getPost 데코레이팅 된 함수
'''
def auth_verify(func):
def wrapper(writer, subject, context):
postWriter = curs.fetchall() ← "select * from writer where ..."
if postWriter == writer :
func(writer, subject, context)
else
...
return wrapper ← 데코레이팅 함수는 `wrapper` 함수를 리턴한다
getPost
에 데코레이터를 사용한다
▽ getPost
에 auth_verify
데코레이터가 선언된다.
@auth_verify ← 선언된 데코레이터
def getPost(writer, subject, context):