decorator 에 대해 알아보자!

배상윤·2025년 1월 14일
0

python

목록 보기
1/1

인공지능 모델 코드를 보다보면 마주하는 생소한 문법인 @ ,,, 즉 decorator 에 대해 정리하려고 한다. 임커밋님의 https://www.youtube.com/watch?v=3t26Z4vk7XE&list=PL6R2CbVlhcYtnLsypcisMzDN344c1Conr&index=5
를 참고하였는데, 앞으로 이분 영상 보면서 조금씩 공부해보려한다.

def deco(f):
	print("deco!)
    return f

@deco
def double(num):
	return 2*num
    
print(double(41))

을 실행하게 되면 "deco!" 와 82 가 순서대로 출력된다.

1. 알아야할 개념

우선 함수는 "객체화" 되어 있기 때문에 함수를 변수처럼 사용할 수 있다는 것을 알아야 데코레이터를 이해할 수 있다.

예를 들면,
1. 함수를 보통의 변수처럼 dictionary 의 value 로 사용할 수 있다.

2. 함수를 다른 함수의 인자로 쓰도록 할 수 있다.

def calculation(func,a,b) : 
	return func(a,b)
    
print(calculation(add,41,3))

이 가능하다. 여기서는 func 인자로 add 가 쓰여지고 있다. 즉 return add(41,3) 이 되는 것이다.

2.작동원리

즉 왼쪽 코드는 오른쪽 코드처럼 작동한다.
@deco 를 붙이게 되면, double 함수가 deco 의 인자로 넘겨져 deco 함수가 먼저 실행이 되고, return f 로 double 함수가 반환되는 것이다.

다시 말하면, @deco 를 double 함수 위에 붙인다는 것은

double=deco(double)

를 하는 것과 같고, 이를 해석하면 deco 함수에 double 를 전달하여 기능이 추가된 함수 객체를 만들고, 이를 다시 double 변수로 바인딩하는 것이다.

결과적으로

print(double(41)) 

을 실행하면

"double" 에 "deco" 함수에서 추가한 기능이 수행되고, double 함수가 수행된다. 이때, double 함수 자체는 변화하지 않는다.

def deco(f):
	print("deco!")
    return 41

만약 위 코드처럼 deco 함수가 input 인자를 그대로 return 하지 않는다면, double 은 더이상 함수가 아니라 41이 되어버리기 때문에 int object 가 되고, 함수로 사용할 수가 없다.

다음 post 에서는 decorator 에 @deco(3) 처럼 인자를 사용하는 경우를 보려고 한다.

profile
성균관대학교 인공지능융합전공

0개의 댓글

관련 채용 정보