본문 바로가기
First step/web depeloper step1

decorator 를 이해해보자

by Joshua21 2021. 11. 28.

django를 연습하던 중에 로그인한 회원에 대한 인가를 위해서 데코레이터로 인증하는 기능을 미리 만들어두고 각 기능의 실행전에 자동으로 인증을 확인하는 절차를 만드려고했다. 데코레이터를 이해하려고하니 클로져를 이해해야하고 클로져를 이해하기 위해 퍼스트 클래스 함수를 이해해야 한다고해서 하나를 알기위해 둘셋을 배우는 과정을 거치고있다.

 

먼저 파이썬에서 퍼스트클래스 함수란 프로그래밍 언어가 함수 (function) 를 first-class citizen으로 취급하는 것을 뜻합니다. 쉽게 설명하자면 함수 자체를 인자 (argument) 로써 다른 함수에 전달하거나 다른 함수의 결과값으로 리턴 할수도 있고, 함수를 변수에 할당하거나 데이터 구조안에 저장할 수 있는 함수를 뜻합니다.퍼스트클래스 함수를 사용하면 이미 정의된 여러 함수를 간단히 재활용할 수 있다는 장점이 있습니다.

 

클로저Closure  ‘자신을 둘러싼 스코프(네임스페이스)의 상태값을 기억하는 함수’다. 그리고 어떤 함수가 클로저이기 위해서는 다음의 세 가지 조건을 만족해야 한다.

  1. 해당 함수는 어떤 함수 내의 중첩된 함수여야 한다.
  2. 해당 함수는 자신을 둘러싼(enclose) 함수 내의 상태값을 반드시 참조해야 한다.
  3. 해당 함수를 둘러싼 함수는 이 함수를 반환해야 한다.

클로저는 이렇게 하나의 함수로 여러가지의 함수를 간단히 만들어낼 수 있게도 해주며, 기존에 만들어진 함수나 모듈등을 수정하지 않고도 wrapper 함수를 이용해 커스터마이징할 수 있게 해주는 장점이 있다.

 

데코레이터는 어떤 함수의 실행시에 항상 같이 실행되야할 기능을 모듈화해서 사용할수도 있다.

일반적으로 데코레이터는 로그를 남기거나 유저의 로그인 상태등을 확인하여 로그인 상태가 아니면 로그인 페이지로 리더랙트(redirect)하기 위해서 많이 사용됩니다. 또한 프로그램의 성능을 테스트하기 위해서도 많이 쓰입니다

 

'First step > web depeloper step1' 카테고리의 다른 글

csv파일로 database에 입력하기  (0) 2021.12.02
관계형 데이터 모델링  (0) 2021.11.28
[django]JWT가 뭘까  (0) 2021.11.24
입문할때 어려웠던점 - 개발 환경 셋팅  (0) 2021.11.23
[django]JSON은 뭘까?  (0) 2021.11.23