파이썬 데코레이터 설명

2022. 1. 4. 22:23·Python
목차
  1. 데코레이터 예시
  2. 데코레이터 개념 설명
  3. 데코레이터 정리

파이썬에서 데코레이터란 무엇일까요? 데코레이터(decorator)의 뜻은 '장식하다'인데요. 파이썬에서는 함수에 특정한 기능을 추가할 때 사용합니다. 데코레이터는 조금 복잡하지만 이를 통해 기존 함수를 수정하지 않고도 다른 함수의 기능을 추가할 수 있다는 장점이 있습니다.

데코레이터 예시

예시를 통해 살펴보도록 하겠습니다. 다음과 같이 Hello, World!를 출력하는 함수가 있습니다. 해당 함수를 수정하지 않고 전후에 특정 문자를 추가하려면 어떻게 할 수 있을까요?

def greeting():
  return "Hello, World!"
​
print(greeting())
# "Hello, World!"

다음과 같이 데코레이터를 사용할 수 있습니다. 데코레이터는 이를 덧붙이려는 함수 앞에서 @functionName 방식으로 사용합니다.

def additionalWords(func):
    def wrapper():
        return "**** " + func() + " ****"
​
    return wrapper
​
@additionalWords
def greeting():
    return "Hello, World!"
​
print(greeting())
# **** Hello, World ****

데코레이터 개념 설명

데코레이터의 개념을 이해하려면 중첩 함수와 클로저를 이해해야 합니다.

  • 중첩 함수: 함수 내에 또다른 함수가 있는 것.
  • 클로저: 중첩 함수가 부모 함수의 변수나 정보를 가두어 사용하는 것으로 부모 함수는 중첩 함수를 리턴.

데코레이터는 클로저를 활용한 개념으로 1. 부모 함수가 중첩 함수를 리턴하며 2. 다른 함수보다 먼저 실행되는 특징을 갖습니다.

 

이전 예시의 데코레이터는 기능적으로 아래의 코드와 동일합니다.

데코레이터를 사용하면 이를 다른 변수에 할당하지 않고도 실행할 수 있으며, 코드 길이를 줄이고 가독성 또한 높일 수 있습니다.

def additionalWords(func):
    def wrapper():
        return "**** " + func() + " ****"
​
    return wrapper
​
def greeting():
    return "Hello, World!"
​
f = additionalWords(greeting)
​
print(f())
# **** Hello, World ****

데코레이터 정리

이상을 통해 살펴본 데코레이터의 특징을 다시 한 번 정리해보면 다음과 같습니다.

  • 부모 함수는 중첩 함수를 리턴한다.
  • 최종 리턴되는 함수는 데코레이터가 붙어 있는 함수(또는 클래스)다.
  • 이를 통해 기존 함수를 수정하지 않고 다른 함수의 기능을 추가할 수 있다.
  • 데코레이터 함수를 만들어 인증, 인가에도 사용할 수 있다.
반응형

'Python' 카테고리의 다른 글

파이썬 클래스와 self 설명  (0) 2022.01.21
파이썬 패키지 정리  (0) 2022.01.12
파이썬 모듈 사용 방법 정리  (0) 2022.01.12
파이썬 List, Tuple, Set, Dictionary 차이점 정리  (0) 2022.01.03
파이썬 함수와 파라미터 전달 방법 및 순서  (0) 2022.01.03
  1. 데코레이터 예시
  2. 데코레이터 개념 설명
  3. 데코레이터 정리
'Python' 카테고리의 다른 글
  • 파이썬 패키지 정리
  • 파이썬 모듈 사용 방법 정리
  • 파이썬 List, Tuple, Set, Dictionary 차이점 정리
  • 파이썬 함수와 파라미터 전달 방법 및 순서
휘 Hwi
휘 Hwi
개발자 성장 로그
  • 휘 Hwi
    개발자 로그: 변화를 위한 공간
    휘 Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 101 (1)
      • Web | Internet (4)
      • HTML | CSS (4)
      • Python (9)
      • Django (20)
      • Javascript (0)
      • Node.js (0)
      • React (0)
      • React Native (0)
      • Database (1)
      • Git (1)
      • Terminal | Vim (1)
      • Auth | Security (4)
      • AWS (0)
      • Docker (0)
      • Kubernetest (1)
      • Deployment (1)
      • Project (2)
      • TIL (12)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정규 표현식
    JWT
    css
    장고 URL
    깃 에러 해결
    HTTP POST 요청
    파이썬
    파라미터
    깃 ssh
    장고
    HTTP
    요소 절대 크기
    깃 퍼블릭 키 등록
    프로젝트 회고
    장고 Views
    html
    요소 크기 설정
    탭내빙
    target="_blank"
    JWT 인코딩
    요소 상대 크기
    깃
    깃 오류
    TIL
    새 탭에서 열기
    JWT 디코딩
    장고 프로젝트
    함수
    배포
    HTTP GET 요청
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
휘 Hwi
파이썬 데코레이터 설명
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.