새소식

반응형
Python/문법

Python 데코레이터: 코드를 우아하게 만드는 마법

  • -
반응형

파이썬의 강력하고 유용한 기능 중 하나인 데코레이터(Decorator)에 대해 알아보겠습니다. 데코레이터를 사용하면 코드를 더 깔끔하고 재사용 가능하게 만들 수 있습니다. 함께 살펴볼까요?

 

데코레이터란?

데코레이터는 기존 함수나 클래스의 동작을 수정하거나 확장할 수 있게 해주는 파이썬의 강력한 도구입니다. 간단히 말해, 다른 함수를 감싸고 있는 함수라고 생각하면 됩니다.

 

기본 데코레이터 만들기

가장 간단한 형태의 데코레이터를 만들어 봅시다.

def simple_decorator(func):
    def wrapper():
        print("함수 실행 전")
        func()
        print("함수 실행 후")
    return wrapper

@simple_decorator
def say_hello():
    print("안녕하세요!")

say_hello()

이 코드를 실행하면 다음과 같은 결과가 나옵니다:

함수 실행 전
안녕하세요!
함수 실행 후

@simple_decorator는 say_hello 함수를 simple_decorator 함수로 감싸라는 의미입니다.

 

반응형

인자를 받는 함수에 데코레이터 적용하기

실제로는 대부분의 함수가 인자를 받습니다. 이런 함수에도 데코레이터를 적용할 수 있습니다.

def logging_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"{func.__name__} 함수 호출. 인자: {args}, {kwargs}")
        return func(*args, **kwargs)
    return wrapper

@logging_decorator
def add(a, b):
    return a + b

result = add(3, 5)
print(f"결과: {result}")

실행 결과:

add 함수 호출. 인자: (3, 5), {}
결과: 8

 

데코레이터에 인자 전달하기

데코레이터 자체에 인자를 전달할 수도 있습니다.

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"안녕하세요, {name}님!")

greet("철수")

실행 결과:

안녕하세요, 철수님!
안녕하세요, 철수님!
안녕하세요, 철수님!
 

클래스 데코레이터

함수뿐만 아니라 클래스에도 데코레이터를 적용할 수 있습니다.

 
def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class Database:
    def __init__(self):
        print("데이터베이스 연결")

# 여러 번 인스턴스를 생성해도 같은 객체를 반환합니다.
db1 = Database()
db2 = Database()
print(db1 is db2)  # True

데코레이터의 실제 사용 사례

  1. 로깅
  2. 성능 측정
  3. 접근 제어 및 인증
  4. 캐싱
  5. 에러 처리

마치며

데코레이터는 파이썬의 강력한 기능 중 하나로, 코드의 재사용성과 가독성을 높여줍니다. 적절히 사용하면 코드를 더욱 우아하고 효율적으로 만들 수 있습니다.

하지만 과도한 사용은 오히려 코드를 복잡하게 만들 수 있으니 주의해야 합니다. 데코레이터의 동작 원리를 잘 이해하고, 필요한 상황에 적절히 사용하는 것이 중요합니다.

여러분의 코드에 데코레이터를 적용해 보세요. 더 나은 코드 구조와 함께 파이썬의 우아함을 경험하실 수 있을 거예요!

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.