Python의 데코레이터: 강력한 코드 확장 기능

2024. 9. 15. 15:51·파이썬/Basic
반응형

Python에서 데코레이터는 매우 강력한 기능입니다. 데코레이터를 사용하면 함수 및 클래스의 동작을 손쉽게 확장할 수 있습니다. 이번 포스팅에서는 Python 데코레이터에 대해 자세히 살펴보겠습니다.

데코레이터란?

데코레이터는 함수 또는 클래스를 수정하거나 확장하는 방법입니다. 데코레이터는 함수 앞에 @ 기호와 함께 사용됩니다.

예를 들어, 다음과 같이 @uppercase 데코레이터를 정의할 수 있습니다:

def uppercase(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result.upper()
    return wrapper

@uppercase
def say_hello(name):
    return f"hello, {name}"

print(say_hello("alice"))  # HELLO, ALICE

이 예제에서 uppercase 함수는 데코레이터 역할을 합니다. say_hello 함수 앞에 @uppercase를 붙임으로써 say_hello 함수의 동작을 변경할 수 있습니다.

데코레이터의 작동 원리

데코레이터는 함수를 인자로 받아 새로운 함수를 반환합니다. 이 새로운 함수는 원래 함수의 동작을 수정하거나 확장할 수 있습니다.

데코레이터가 호출되면 다음과 같은 과정이 진행됩니다:

  1. 데코레이터 함수가 호출되어 새로운 함수 객체를 반환합니다.
  2. 새로운 함수 객체가 원래 함수 객체를 대체합니다.
  3. 새로운 함수 객체가 호출될 때마다 데코레이터 내부의 동작이 실행됩니다.

이러한 과정을 통해 데코레이터는 함수의 동작을 수정할 수 있습니다.

데코레이터의 활용 사례

데코레이터는 다양한 용도로 사용될 수 있습니다. 대표적인 활용 사례는 다음과 같습니다:

  1. 로깅 및 디버깅: 함수 호출 시간, 입출력 값 등을 기록하는 데 사용할 수 있습니다.
  2. 인증 및 권한 검사: 사용자 인증이나 권한 검사 로직을 데코레이터로 구현할 수 있습니다.
  3. 캐싱: 함수 호출 결과를 캐싱하여 성능을 향상시킬 수 있습니다.
  4. 입력 검증: 함수 인수의 유효성을 검사하는 데 사용할 수 있습니다.
  5. 에러 처리: 함수 실행 중 발생한 예외를 처리하는 데 사용할 수 있습니다.

이 외에도 데코레이터는 함수의 동작을 다양하게 확장할 수 있는 도구입니다.

데코레이터의 응용

데코레이터는 더 복잡한 형태로도 구현될 수 있습니다. 예를 들어, 데코레이터에 인자를 전달하거나, 데코레이터를 중첩해서 사용할 수 있습니다.

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

@repeat(3)
def say_hello(name):
    return f"Hello, {name}! "

print(say_hello("Alice"))  # Hello, Alice! Hello, Alice! Hello, Alice!

이 예제에서는 repeat 데코레이터에 호출 횟수 n을 인자로 전달할 수 있습니다. 이를 통해 데코레이터의 동작을 더 유연하게 변경할 수 있습니다.

데코레이터의 장점

데코레이터를 사용하면 다음과 같은 장점을 얻을 수 있습니다:

  1. 코드 재사용성 향상: 데코레이터를 통해 함수의 동작을 쉽게 확장할 수 있습니다.
  2. 가독성 향상: 데코레이터를 사용하면 코드의 의도를 명확히 표현할 수 있습니다.
  3. 유지보수성 향상: 데코레이터를 통해 관련 기능을 한 곳에 모아서 관리할 수 있습니다.

이처럼 Python의 데코레이터는 강력한 코드 확장 기능을 제공합니다. 데코레이터를 활용하면 함수와 클래스의 동작을 효과적으로 수정하고 확장할 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'파이썬 > Basic' 카테고리의 다른 글

다양한 이미지 확장자와 확장자 변경하기  (6) 2024.10.23
Python 데코레이터 : 정적 메서드부터 데이터 클래스까지 알아보기  (0) 2024.09.16
sort와 sorted의 차이점  (0) 2024.02.15
문자열에 원하는 문자를 추가하는 방법  (2) 2024.02.10
Python에서 JSON과 Dictionary 간 변환하는 방법  (2) 2024.02.08
'파이썬/Basic' 카테고리의 다른 글
  • 다양한 이미지 확장자와 확장자 변경하기
  • Python 데코레이터 : 정적 메서드부터 데이터 클래스까지 알아보기
  • sort와 sorted의 차이점
  • 문자열에 원하는 문자를 추가하는 방법
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    스크립트 실행
    셀레니움
    devlife
    유니티
    리스트
    appdevelopment
    믈레코비타멸균우유
    programmerlife
    스크립트 실행 순서
    codingtips
    상품 리뷰 크롤링
    파이썬
    list
    C#
    쇼핑몰리뷰
    programming101
    라떼우유
    리뷰관리
    카페24리뷰이관
    스마트스토어리뷰
    리뷰이관
    learntocode
    카페24리뷰
    rtsp
    ipcamera
    codingcommunity
    Python
    긴유통기한우유
    unity
    cv2
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Python의 데코레이터: 강력한 코드 확장 기능
상단으로

티스토리툴바