본문으로 건너뛰기
Minsing Log
뒤로 가기

데코레이터(@)가 뭐야?

Programming & CS

결론

함수를 말그대로 장식하는것으로 우리가 수학에서 배운 합성함수의 개념을 생각하면 되겠다. 지리는 설명1 지리는 설명2

데코레이터는 기존 함수를 수정하지 않으면서 추가기능을 구현할때 쓴다

데코레이터 = trace함수 기존함수 = hello, world함수

def trace(func):                             # 호출할 함수를 매개변수로 받음
    def wrapper():                           # 호출할 함수를 감싸는 함수
        print(func.__name__, '함수 시작')    # __name__으로 함수 이름 출력
        func()                               # 매개변수로 받은 함수를 호출
        print(func.__name__, '함수 끝')
    return wrapper                           # wrapper 함수 반환
 
def hello():
    print('hello')
 
def world():
    print('world')
 
trace_hello = trace(hello)    # 데코레이터에 호출할 함수를 넣음
trace_hello()                 # 반환된 함수를 호출
trace_world = trace(world)    # 데코레이터에 호출할 함수를 넣음
trace_world()           

@를 쓰는 경우

def trace(func):                             # 호출할 함수를 매개변수로 받음
    def wrapper():
        print(func.__name__, '함수 시작')    # __name__으로 함수 이름 출력
        func()                               # 매개변수로 받은 함수를 호출
        print(func.__name__, '함수 끝')
    return wrapper                           # wrapper 함수 반환
 
@trace    # @데코레이터
def hello():
    print('hello')
 
@trace    # @데코레이터
def world():
    print('world')
 
hello()    # 함수를 그대로 호출
world()    # 함수를 그대로 호출

원리

데코레이터는 함수를 감싸는 형태로 되어있다.

참고-> 데코레이터를 여러개 지정할수도 있다.

@데코레이터1
@데코레이터2
def 함수이름():
    코드

참고문헌 https://dojang.io/mod/page/view.php?id=2427

공개 여정 구독

글이 올라오면 이메일로 보내드릴게요.

개발, 창업, 배움, 실패와 회고를 짧고 솔직하게 기록합니다. 검색으로 스쳐가는 독자가 아니라 여정을 따라오는 팬을 만들기 위한 뉴스레터입니다.

뉴스레터는 준비 중입니다. 그동안 RSS 로 구독하거나 이메일 로 알림을 요청해 주세요.


이 글 공유하기:

댓글

GitHub 계정으로 로그인해 댓글을 남길 수 있습니다.


이전 글
잘못된 추상화
다음 글
추상화란?