
데코레이터란?
파이썬에서는 데코레이터(Decorator)를 지원한다.
말 그대로 decorate + or 로 장식하는 정도로 생각할 수있다.
데코레이터는 함수(메서드)를 장식하여 특정 추가 기능을 적용하여 구현 할 때 편하게 사용할 수 있다.
웹페이지로 예를 들어서 보자면 로그인이 필요한 서비스가 있을 것이고, 로그인 없이도 사용할 수 있는 페이지가 있을 것이다.
이 때 로그인을 확인하는 코드를 매번 작성하는 것이 아니라 기존의 함수에 데코레이터를 추가해준다면 기능을 간결하고 반복없이 효율적으로 구현할 수 있다.
데코레이터는 언제 사용할까?
Ex)
예를 들어 아래와 같은 기능을 구현하고자 하는 코드가 있다.
def a():
code_1
code_2
code_3
def b():
code_1
code_4
code_3
a( )와 b( )에서는 code_1과 code_3 부분이 반복적으로 필요하기 때문에 비효율적이고, 다른 함수에서도 반복되어 필요하다면 따로 함수에서 정의해주는 것이 좋다.
이럴 때 사용할 수 있는 것이 'Decorator'이다.
데코레이터를 사용하기 위해 새로운 함수 c를 구현해봅시다.
def c(func):
def wrapper(*args,**kwargs):
code_1
result=func(*args,**kwargs)
code_3
return result
return wrapper
이렇게 해두고, 아까의 a( ), b( ) 코드를 데코레이터를 사용해서 수정해봅시다.
데코레이터를 사용할 때는 '@' 를 사용해주면 된다.
@c
def a():
code_2
@c
def b():
code_4
@c 를 사용해서 c( ) 함수안의 code_1과 code_3은 그대로 사용하면서 필요한 기능(코드)만 사용함을 알 수 있다.
코드는 이렇게 작동한다.
@c를 사용하고 a( )를 작성하면, a( )가 c( )의 func로 받아져 a( )가 wrapper( )로 바뀌어 아래의 코드가 실행되는 것이다.
c( )의 code_1이 실행되고 'result=func(*args,**kwargs)'에서 code_2가 실행되고, 이어서 code_3이 실행된다.
데코레이터 활용 예시
설명만으로는 받아들이기가 어렵기 때문에 쉬운 예시를 활용해 봅시다.
timer( ) 를 만들어 내가 사용하고자 하는 함수앞에 데코레이터를 이용해주었을 때 함수가 실행되는 시간을 출력하는 코드를 작성해 봅시다.
import time
def timer(func):
def wrapper(*args,**kwargs):
start_time = time.time()
result = func(*args,**kwargs)
end_time = time.time()
print("running_time: {}".format(end_time - start_time))
return result
return wrapper
이렇게 timer()를 작성해주었으면 앞으로 사용하고자 하는 함수앞에 @timer를 해주면 실행시간(running time)을 출력해줄것이다.
간단하게 코드를 작성해서 running time을 확인해 봅시다.
@timer
def test(num1,num2):
result=0
for num in range(num1,num2+1):
result+=num
return result
test(1,10000)

running_time과 함께 result값이 출력된것을 볼 수 있습니다.
이렇게 해서 간단하게 Decorator가 언제 쓰이는지와 함께 예시를 알아보았습니다.
잘못된 부분이나 궁금한 점은 댓글로 알려주세요!
'데이터분석 > Python' 카테고리의 다른 글
| [SQL] mySQL 문법 정리(2)- GROUP BY, HAVING (0) | 2021.02.06 |
|---|---|
| [SQL] mySQL 문법 정리(1)-CREATE,ALTER,DROP,INSERT,SELECT (0) | 2021.02.06 |
| [Python] Pandas 기초부터 사용법 모두 알아보기(Pandas 사이트 추천) (0) | 2021.01.30 |
| 주피터노트북 iPython설정(startup, inline, Autopep8) (0) | 2021.01.30 |
| [Python] 아나콘다,주피터노트북 환경구축,git bash (0) | 2021.01.09 |
댓글