Python고급 주제

decorator 기본

함수를 감싸서 동작을 확장하는 Python decorator의 기본 구조와 읽는 법을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

python
def log_call(func):
    def wrapper():
        print("called")
        return func()
    return wrapper

@log_call
def hello():
    print("hello")

설명

  • decorator는 함수를 입력으로 받아, 기능이 확장된 새 함수를 돌려주는 패턴입니다.
  • 로깅, 권한 검사, 캐싱, 시간 측정처럼 "기존 함수 전후에 공통 동작을 덧붙이는" 상황에 잘 맞습니다.
  • @name 문법은 "이 함수를 해당 decorator로 감싼다"는 뜻으로 읽으면 됩니다.
  • 처음에는 문법이 낯설지만, 결국 함수도 값이라는 Python 특징의 응용이라고 볼 수 있습니다.

짧은 예제

python
def emphasize(func):
    def wrapper():
        return f"**{func()}**"
    return wrapper

@emphasize
def greet():
    return "hello"

빠른 정리

요소역할
decorator 함수다른 함수를 받아 감쌈
wrapper실제 확장 동작 수행
@decorator적용 문법
공통 처리로깅, 검증, 측정 등에 유용

공식 참고: Glossary: decorator, functools

주의할 점

decorator는 강력하지만 함수 흐름을 한 번 더 감추기 때문에 남용하면 읽기가 어려워집니다. 공통 처리 패턴이 반복될 때 명확한 이름의 decorator로 쓰는 편이 좋습니다.