본문 바로가기
Python

[Python] Decorators 장식자 알아보기

by Lee David 2022. 8. 10.
반응형

AOP란?

스크립트 언어들(python, javascript)에서 사용하는 장식자를 알아보기 전에 짚고 넘어야할 개념이 있습니다.

  • AOP - Aspect Oriented Programming

풀이 하자면 기능에 촛점을 맞춘 개발이라는 뜻이라고 해석됩니다.

만약에 우리가 일정한 용량의 파일을 복사하고 있다고 가정 하였을때 파일을 복사하면서 발생할 수 있는 I/O에 대하여 딜레이를 준다고 가정한다면 우리가 만들어 놓은 메서드 안에 sleep을 걸어주게 되고 이러한 코드들이 많아지게 될것 입니다.

import os
import shutil
import time

time.sleep(1)
BASE_PATH = os.path.dirname(os.path.realpath(__file__))

shutil.copyfile(os.path.join(BASE_PATH, "..", "A", "copyme.txt"),
                os.path.join(BASE_PATH, "B", "copyme.txt"))

부가적인 코드들이 많아지게 되면 어느순간 중요한 기능을 담당하는 코드와 섞이게 되고 어수선한 상황이 연출되어 개발자도 사람이기에 이슈로 남는 경우가 빈번하게 발생하게 됩니다.

그래서 AOP란 이러한 상황들에서 중요한 기능을 집중해서 만들고 부가적인 이벤트 들에 대하여 관리해주는 개념이라고 생각하시면 됩니다.


장식자(Decorators) 알아보기

주요 기능으로는 특정 함수/클래스를 감싸고 제어하는 역할을 담당합니다.

  • 인자 변환
  • 반환값 변환
  • 호출 제어
    • 실구현 함수를 제외한 즉시 반환
    • 실구현 함수의 반환값 반환
def decorators_example(aspect_fn):

    # aspect_fn을 제어하는 함수
    def proxy_function(a, b):
        ...
        return aspect_fn(a)
        
    # 제어 함수 return
    return proxy_function

함수를 감싸는 또다른 함수가 장식자라고 생각하시면 쉽게 이해가 됩니다.

장식자 즉 감싸줄 함수를 구현하고 사용하게 되면 파이썬 코드를 간단하고 직관적이게 수정이 가능합니다.

@decorators_example
def aspect_fn(a):
    return ...

 

반응형