Django Decorator

노광오·2020년 6월 18일
0

Django

목록 보기
5/7

이게 뭐지.... 너무 어렵다..

Decorator가 무엇인가??

데코레이터는 현재 존재하는 함수의 구조를 바꾸지 않고도 기능을 추가할 수 있도록 해주는 파이썬의 디자인 패턴이다.
이게 가능한 이유는 파이썬에서 함수를 객체로 인지하기 때문인데 즉, 함수 역시 다른 함수의 파라미터로 입력될 수도 있고 리턴되는것도 가능하고, 다른 함수 내에 정의될 수도 있다는 뜻이다.
데코레이터의 가장 중요한 개념은 클로져라고 불리는 패턴인데, 파이썬은 중첩된 함수가 외부에 있는 둘러싸고있는 함수의 스코프에 접근할 수 있도록 되어있다.

Decorator 예시1

간단한 decorator예시 하나를 가져왔다.

간....간..단하다구요..??

이 예시는 hello를 데코레이팅 한 것이다.
우선 따라가기 쉽게 코드의 진행 순서를 줄 번호를 이용해서 설명해 보자면
1 - 9 - 8 - 11 - 12 - 2 - 3 - 4 - 10 - 5 - 6
확실하지는 않지만 이런 순서로 가는것 같다.

하지만 여기에서 한 줄만 추가되어도 순서가 많이 바뀐다.

2번째 줄에 print구문 한줄이 추가 되었다.
여기서 순서를 다시 정해보면
1 - 10 - 9 - 2 - 12 - 13 - 3 - 4 - 5 - 11 - 6 - 7
이런 식으로 가게 되는 것 같다. 이 순서를 따라가면서 한줄 한줄 실행된다고 하면 이해하기 비교적 쉬운것 같다.

다음 예제로 가보자

Decorator 예제2

갑자기 너무 어려워 진 것 같다.
하지만 천천히 생각해보면 똑같이 어렵다 ㅎㅎ...

위에서 한줄 추가 한 뒤 보여주었던 순서와 같은 형식이다.
데코레이팅을 하려는 함수 위에 @데코레이터 를 선언하게 되면, 데코레이션이 초기화? 가 되어 해당 데코레이터를 먼저 처리해야 한다. 심지어 이번에는 데코레이터에서 인자도 받아오고 있다. 따라서 if문을 통해 코드가 실행되기 이전에 1~4번 줄이 선행 되어야 하고 위의 코드로는 "아이유" 가 출력이 되게 된다. 그 후 다른 코드들은 순서대로 처리하면 끝이다.

그래도 까먹지 말고 기억해야 할 것은 데코레이터가 선언이 되면 데코레이터 자체에서 처리해야할 구문이 있는지 확인을 해야 한다는 것 이다!!

결과는 이런식으로 나오게 된다.
다른 코드들도 더 공부해 봐야 더 확실히 알것 같지만 코드의 진행 순서를 이해하게 되면 어렵지 않은것 같지만 순서를 이해하는게 어려운것 같다....

0개의 댓글