Dev_Jaekwan
article thumbnail
Published 2023. 1. 30. 16:52
[OOP_Python] decorator 이해하기 Python

데코레이터란

파이썬 데코레이터의 정의를 찾아보면 다음과 같다

기존함수를 입력 받아서 기능이 추가된 새로운 함수 객체로 만들어 주는 역할을 수행한다.

기능이 추가된 새로운 함수객체? 잘 이해가 되지 않으니 코드로 이해보면 좋다.

코드로 이해하기

def 재관():
    print("안녕하세요. 저는 재관이에요.")

def 지수():
    print("안녕하세요. 저는 지수에요.")

def 민지():
    print("안녕하세요. 저는 민지에요.")

def 정우():
    print("안녕하세요. 저는 정우에요.")

def 동훈():
    print("안녕하세요. 저는 동훈이에요.")

위와 같이 5개의 함수가 정의되어있는 상황에서, 갑자기 각 함수별로 성별까지 추가로 print가 되게 코드를 수정해야 된다면, 데코레이터 없이 아래와 같이 수정이 가능하다.

 

 

방법1. 하나씩 기능 추가해보기

def 재관():
    print("안녕하세요. 저는 재관이에요.")
    print("저는 남성입니다".)

def 지수():
    print("안녕하세요. 저는 지수에요.")
    print("저는 여성입니다.")

def 민지():
    print("안녕하세요. 저는 민지에요.")
    print("저는 여성입니다.")

def 정우():
    print("안녕하세요. 저는 정우에요.")
    print("저는 남성입니다.")

def 동훈():
    print("안녕하세요. 저는 동훈이에요.")
    print("저는 남성입니다.")

하지만 위와 같이 수정해야 되는 상황에서 사람이 1000명이나 된다면, 또는 수정해야 되는 코드가 길다면 수작업으로 진행하기 쉽지 않다.

어떻게 해야 될까?

 

 

방법2 : 함수 재정의

def 남성(fn):
    def 새로운함수():
        fn()
        print("저는 남성입니다.")
    return 새로운함수

def 여성(fn):
    def 새로운함수():
        fn()
        print("저는 여성입니다.")
    return 새로운함수

# 함수 재정의
재관 = 남성(재관())
지수 = 여성(지수())
민지 = 여성(민지())
정우 = 남성(정우())
동훈 = 남성(동훈())

재관, 정우, 동훈과 같이 남성객체는 남성( )이라는 함수를 통해 새롭게 재정의 할 수 있으며 민지, 지수도 여성( )함수를 통해 새로운 함수 객체를 생성 할 수 있다.

 

 

방법3 : 데코레이터를 활용해 정의하기

@남성
def 재관():
    print("안녕하세요. 저는 재관이에요.")

@여성
def 지수():
    print("안녕하세요. 저는 지수에요.")

@여성
def 민지():
    print("안녕하세요. 저는 민지에요.")

@남성
def 정우():
    print("안녕하세요. 저는 정우에요.")

@남성    
def 동훈():
    print("안녕하세요. 저는 동훈이에요.")

이와 같이 데코레이터 문법을 작성하면 앞서 방법2의 단계와 동일한 결과를 가지게 된다.

profile

Dev_Jaekwan

@Dev_Jaekwan

검색 태그