파이썬/기초 프로그래밍

래퍼(Wrapper)와 데코레이터(Decorator): 파이썬 함수 확장의 핵심

Data Jun 2025. 6. 22. 15:40

파이썬에서는 기존의 함수를 변경하지 않고도 기능을 확장할 수 있는 도구들이 있습니다.
그중 가장 많이 사용되는 개념이 바로 **래퍼(wrapper)**와 **데코레이터(decorator)**입니다.

 

1. 래퍼(Wrapper)란?

 

래퍼는 기존 함수를 감싸는 함수입니다.

 

def wrapper(func):
    def inner(*args, **kwargs):
        print("전처리 작업")
        result = func(*args, **kwargs)
        print("후처리 작업")
        return result
    return inner

이처럼 func를 감싸는 함수(inner)가 래퍼입니다.
이 구조는 데코레이터의 기본 형태이기도 합니다.

 

2. 데코레이터(Decorator)란?

 

데코레이터는 **함수를 꾸며주는 문법적 설탕(Syntactic Sugar)**입니다.
사실상 데코레이터는 래퍼 함수의 간편한 표현 방식입니다.

 

@wrapper
def greet(name):
    print(f"Hello, {name}!")

위 코드는 다음과 동일합니다:

greet = wrapper(greet)

즉, @wrapper는 greet 함수를 wrapper(greet)로 감싸주는 역할을 합니다

 

언제 쓰나요?

  • 로깅 추가
  • 실행 시간 측정
  • 권한 검사
  • 예외 처리 감싸기

같은 공통적인 기능을 여러 함수에 적용할 때, 데코레이터는 매우 유용합니다.

 

3. 실용 예시: 실행 시간 측정 데코레이터

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 실행 시간: {end - start:.2f}초")
        return result
    return wrapper

@timer
def compute():
    time.sleep(1)
    return "완료!"

compute()

 

 

 

 

정리하면

개념 설명
래퍼 함수의 전후 로직을 감싸는 함수
데코레이터 래퍼를 함수에 적용하는 문법 표헌

 

래퍼는 개념, 데코레이터는 표현입니다.
복잡한 코드를 깔끔하게 확장하려면 데코레이터를 활용해보세요