Python/Python 정리

[Python] @ (Decorator) 정리

우준세 2021. 6. 14. 16:30
728x90
반응형

 

 

이번 포스팅은 파이썬을 사용하면서

오픈소스를 사용하며 클래스나 함수에 나왔던 @ 를 이해하기 위한 정리 포스팅입니다.


1. @ 는 무엇인가? 

 

@decorator_
def function():
    print("what is this?")

 

오픈소스를 이용하여 파이썬을 이용할 때 @로 시작하는 것들을 볼 수 있습니다.

@는 데코레이터(decorator)로 장식하다의 decorate에 er(or)을 붙임으로 장식하는 도구로 설명할 수 있습니다.

 

어디에 장식하는 걸 까요?

데코레이터는 함수를 수정하지 않고 추가 기능을 구현할 때 사용합니다. 

 

예를 들어 볼까요? 

 

def func1():
	print("func1 시작")
	print("func1 실행")
	print("func1 끝")
    
    
def func2():
	print("func2 시작")
	print("func2 실행")
	print("func2 끝")
    
func1()
func2()

 

실행 결과 

만약 정의된 함수가 많고 그 함수마다 시작과 끝을 알려줘야 한다면 함수를 만들 때마다 print 문을 넣어줘야 합니다. 

이런 경우에 데코레이터를 사용하면 편리해집니다. 

 

이번은 함수의 시작과 끝을 알려주는 데코레이터를 만들겠습니다. 

 

def decorator1(func) :
    def deco1() :
        print(func.__name__, '함수 시작')
        func()
        print(func.__name__, "함수 끝")
    return deco1
    
def func1():
	print("func1 실행")

def func2():
	print("func2 실행")
    
decorator_func1 = decorator1(func1)
decorator_func1()
decorator_func2 = decorator1(func2)
decorator_func2()

 

실행 결과 

 

이렇게 함수를 정의하고 호출할 함수로 매개변수로 받아 같은 코드를 반복해서 사용할 수 있습니다.


2. @ 사용하기 

앞서 했던 함수에 매개변수를 사용하여 반복되는 코드를 사용했다면 

이제는 @를 사용하여 조금 더 간편하게 데코레이터를 사용해보겠습니다. 

@를 사용하는 방법은 호출할 함수 위에 @데코레이터 형식으로 사용합니다.

 

def decorator1(func) :
    def deco1() :
        print(func.__name__, '함수 시작')
        func()
        print(func.__name__, "함수 끝")
    return deco1

@decorator1
def func1():
	print("func1 실행")

@decorator1
def func2():
	print("func2 실행")

func1()
func2()

 

실행 결과

 

앞서 했던 것과 같은 결과를 조금 더 쉽게 얻을 수 있었습니다.

 

@데코레이터의 실행 과정을 그림으로 표현했습니다.

 

 

이렇게 데코레이터는 함수를 감싸는 형태로 되어있습니다. @데코레이터는 따라서 기존의 함수를 수정하지 않으면서

기능을 추가할 때 사용합니다.

 

물론 @데코레이터를 여러 번 사용하여 기능을 추가할 수도 있습니다.

 

 

이번 포스팅은 @데코레이터에 대해 정리해봤습니다.

 

틀린 부분이나 질문이 있으면 댓글로 남겨주세요 

 

감사합니다 :) 

 

 

728x90
반응형