Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 여러 개의 함수 데코레이터를 연결해 사용하는 방법

데코레이터(decorator)는 일종의 "래퍼(wrapper)"입니다. 함수 자체의 코드를 전혀 수정하지 않으면서도, 해당 함수가 실행되기 전과 후에 원하는 코드를 추가로 실행할 수 있게 해주는 강력한 기능입니다.

데코레이터 체인 예제

여러 개의 데코레이터를 하나의 함수에 연달아 적용하는 것을 "데코레이터 체인"이라고 합니다. 아래 예제는 hello 함수를 두 개의 데코레이터(@makebold, @makeitalic)로 감싸는 코드입니다.

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print(hello())

실행 결과

<b><i>hello world</i></b>

동작 원리 이해하기

위 코드가 실행되면 다음과 같은 순서로 동작합니다.

  1. Python은 데코레이터를 아래에서 위로 적용합니다. 즉, hello 함수가 먼저 makeitalic으로 감싸지고, 그 결과가 다시 makebold로 감싸집니다.
  2. 따라서 최종 출력은 <b><i>hello world</i></b>가 되어, 화면에는 hello world처럼 굵은 기울임꼴 텍스트로 표시됩니다.

이처럼 데코레이터를 체인으로 연결하면 로깅, 인증, 캐싱, HTML 태그 변환 등 다양한 부가 기능을 기존 함수의 코드를 건드리지 않고 손쉽게 추가할 수 있습니다.