데코레이터 맛보기

김예랑·2021년 7월 3일
0

데코레이터란?

  • decorate(장식하다)의 명사..
  • 쉽게 말해 파이썬에서 데코레이터는
  • 함수를 장식하는 함수 또는 클래스이다. (이번 글에서는 함수로 맛만 보자.)

데코레이터를 왜 쓸까?

쓰는 이유는 간단하다.
특정 함수를 호출할 때 사전에 작동시키고 싶은 작업이 있는 경우이다.

  • 물론 그 작업이 간단하거나 많이 쓰이지 않는다면 굳이 데코레이터를 활용하지 않아도 된다.
  • 하지만 그 작업이 복잡하거나 많이 쓰인다면(여러 함수 앞에 붙여서 쓰고 싶다면)
  • 데코레이터를 쓰는 것이 효율적이고 가독성도 좋아지고 코드 관리하기도 편해진다. (이뻐진다)

데코레이터 쓰는 방법

  1. 데코레이터를 정의한다.
  2. 데코레이터를 사용한다. ('@'를 붙여서)

끝. 뭔말인지 좀 그러니까 간단하게 코드로 구현해보자.

# 데코레이터 정의 및 작성
def my_decorator(my_function):
  def my_wrapper(name, *args, **kwargs):
    print(f'"{name}"님 안녕하세요!!! => decorator')
    
    return my_function(name, *args, **kwargs)

  return my_wrapper

# 데코레이터 사용
@my_decorator
def name_age(name, age):
  print(f'"{name}"님은 "{age}"살 입니다!')

# 호출
name_age('yerang', 33)

# 결과
'''
"yerang"님 안녕하세요!!! => decorator
"yerang"님은 "33"살 입니다
'''

데코레이터 정의 및 작성

  • 원하는 이름으로 정의한다. (my_decorator)
    이 때 뒤에 호출시킬 함수를 인자값으로 받는다. (my_function)

  • 데코레이터 안에 작동시킬 작업을 함수로 정의한다. (my_wrapper)
    이 때 뒤에 호출시킬 함수의 인자값을 그대로 인자값으로 받는다. (name, *args, **kwargs)

    my_wrapper 작성 =>

    • 원하는 작업을 작성한다. => print(f'"{name}"님 안녕하세요!!! => decorator')
    • my_decorator에서 인자값으로 받은 my_function을 반환하는 코드를 작성한다.
      => return my_function(name, *args, **kwargs)
  • my_wrapper를 호출하는 코드를 작성한다. => return my_wrapper

데코레이터 사용, 호출, 결과

  • 호출할 함수 앞에 @my_decorator를 붙여 데코레이터를 사용한다.
@my_decorator
def name_age(name, age):
  print(f'"{name}"님은 "{age}"살 입니다!')
  • 함수 호출 !
name_age('yerang', 33)
  • 결과
    '''
    "yerang"님 안녕하세요!!! => decorator
    "yerang"님은 "33"살 입니다
    '''

끝. 처음엔 데코레이터의 작동 원리가 헷갈렸지만 직접 코드로 작성해보니 이해가 수월하다.

간단하게 말하자면,
반복될 작업을 데코레이터로 정의하고, 데코레이터 안에 원하는 작업을 함수로 작성하고,
사용한다! 호출할 함수 앞에 @my_decorator 형태로 붙여서. YES!
한번 데코레이터를 정의해 놓으면 코드 어디서나 간단하게 데코레이터를 붙여 쓸 수 있으므로 매우 편리하다. GOOD!

profile
안녕하세요. 백엔드 애송이 백송이 김예랑 입니다.

0개의 댓글