[Python] 데코레이터

2024. 4. 17. 15:33·개발 (Development)/Python

파이썬 데코레이터 :: 함수 기능 확장의 강력한 도구

데코레이터란?

파이썬 데코레이터는 함수의 기능을 추가하거나 변경하는 데 사용되는 도구이다. 함수 앞에 @ 기호와 함께 데코레이터 함수를 작성하여 적용한다. 데코레이터 함수는 원래 함수를 입력으로 받고, 감싸거나 수정된 함수를 반환한다.

데코레이터 작동 방식

데코레이터는 다음과 같은 단계로 작동한다.

  • 데코레이터 함수 호출 : 데코레이터 함수가 @ 기호와 함께 함수 앞에 작성되면 호출된다.
  • 원래 함수 전달 : 데코레이터 함수는 원래 함수를 인수로 받는다.
  • 감싸기 또는 수정 : 데코레이터 함수는 원래 함수를 감싸거나 수정하는 로직을 실행한다.
  • 수정된 함수 반환 : 데코레이터 함수는 감싸거나 수정된 함수를 반환한다.
  • 실행 : 반환된 함수는 일반적인 함수와 동일하게 호출되고 실행된다.

데코레이터 활용 사례

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

  • 함수 로그 기록 : 함수 실행 전후에 로그 메시지를 출력하는 데코레이터를 작성하여 함수 실행 정보를 기록할 수 있다.
  • 인증 및 권한 부여 : 함수 실행을 특정 사용자에게만 허용하거나 사용자 권한에 따라 기능을 제한하는 데코레이터를 작성하여 보안을 강화할 수 있다.
  • 캐싱 : 함수 실행 결과를 캐싱하여 동일한 입력에 대해 함수를 반복적으로 호출하지 않도록 할 수 있다.
  • 측정 및 성능 분석 : 함수 실행 시간을 측정하거나 리소스 사용량을 추적하는 데코레이터를 작성하여 함수 성능을 분석할 수 있다.
  • 유틸리티 함수 작성 : 함수에 매개변수 검증, 예외 처리, 반환값 포맷팅 등을 수행하는 데코레이터를 작성하여 코드 간결성을 높일 수 있다.

데코레이터 작성 예시

다음은 로그 기록 데코레이터 작성 예시다.

def log_function(function):
  def wrapper(*args, **kwargs):
    print(f"함수 '{function.__name__}' 실행 시작")
    result = function(*args, **kwargs)
    print(f"함수 '{function.__name__}' 실행 종료")
    return result
  return wrapper

@log_function
def add_numbers(a, b):
  """두 수를 더합니다."""
  return a + b

print(add_numbers(3, 4))​

데코레이터 활용 팁

  • 데코레이터는 함수 기능을 확장하는 강력한 도구이지만, 남용하면 코드 가독성을 저하시킬 수 있다. 따라서 필요한 경우에만 사용하고, 단순하고 명확하게 작성하는 것이 중요하다.
  • 여러 개의 데코레이터를 함께 사용할 수 있다. 이 경우 데코레이터는 안쪽에서 바깥쪽 순으로 실행된다.
  • 데코레이터를 사용하면 함수 서명이 변경될 수 있으므로 주의해야 한다.
  • 데코레이터에 대한 자세한 내용은 파이썬 공식 문서를 참고.

 

반응형

'개발 (Development) > Python' 카테고리의 다른 글

[Python] 엑셀 파일 간 데이터 비교 (여러 시트일 때)  (0) 2025.01.12
[Python] 패키지 설치 SSL Error 해결  (0) 2025.01.05
[Python] try, except 문에서 Exception이 여러 개일 경우  (0) 2024.04.17
[Python] List Comprehension  (0) 2024.04.17
[Python] 리눅스 환경에서 윈도우 환경으로 파일 저장 (SMB 프로토콜)  (0) 2024.04.12
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] 엑셀 파일 간 데이터 비교 (여러 시트일 때)
  • [Python] 패키지 설치 SSL Error 해결
  • [Python] try, except 문에서 Exception이 여러 개일 경우
  • [Python] List Comprehension
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (238) N
      • 개발 (Development) (171) N
        • Algorithm (1)
        • Angular (1)
        • AWS (7)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (36)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (34) N
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (12)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준자바
    JSON
    PostgreSQL
    python
    deepseek
    백준알고리즘
    Linux master
    리눅스 마스터 2급
    Linux
    리눅스 마스터 2급 2차
    AWS
    JPA
    DevOps
    백준
    MyBatis
    docker
    springboot
    파이썬
    자바
    pandas
    Kubernetes
    Kafka
    오답노트
    Vue.js
    javascript
    데이터분석
    백준온라인저지
    ADsP
    java
    timescaledb
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] 데코레이터
상단으로

티스토리툴바