[Python] 데코레이터

rebugger·2023년 3월 13일
0

python

목록 보기
1/1
post-thumbnail

Python 데코레이터

수많은 데코레이터 설명 중 그나마 이해가 잘된 함수에서 코드르 바꾸지 않고 추가/수정하고 싶을 때 사용하는 문법 으로 이미 선언한 함수를 변경하지 않고 내용 위에 붙여쓰기를 통해 간편하게 사용할 수 있다.


✔ 데코레이터 예시

▽ 아래 코드를 보면 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

✔ 데코레이터 실제 사용 예

  1. getPost 함수가 있고 게시글에 접근하려 한다.

    '''
    함수명: getPost
    기능: 게시글 내용 불러오기
    '''
    def getPost(writer, subject, context):
        ...
  2. 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` 함수를 리턴한다
  3. getPost에 데코레이터를 사용한다
    getPostauth_verify 데코레이터가 선언된다.

    @auth_verify 		← 선언된 데코레이터
    def getPost(writer, subject, context):

✔ 참고

[python] decorator 파이썬 데코레이터 이해하기
Python snippets 데코레이터 예제

profile
모르는게 많고, 부족함이 많다는 것을 인정하기

0개의 댓글