멋쟁이 사자처럼/그 외

Python _ 'decorator' 이해하기

니츄 2023. 1. 5. 17:14

 

* 데코레이터란?

  • @로 시작하는 구문.
  • 메인 함수에 대한 가독성과 직관성을 더욱 좋게 함.
  • 반복되는 구문을 간단하게 재사용할 수 있도록 변형시켜줌.

 

**decorator를 쓰지 않은 코드

class Deco:

    def function():
        print("안녕하세요, 좋은 아침입니다.")
        print("오늘은 함수를 알아볼거에요.")
        print("수고하셨습니다.")

    def class1():
        print("안녕하세요, 좋은 아침입니다.")
        print("오늘은 클래스를 알아볼거에요.")
        print("수고하셨습니다.")

    def list():
        print("안녕하세요, 좋은 아침입니다.")
        print("오늘은 리스트를 알아볼거에요.")
        print("수고하셨습니다.")

    def decorator():
        print("안녕하세요, 좋은 아침입니다.")
        print("오늘은 데코레이터를 알아볼거에요.")
        print("수고하셨습니다.")

Deco.function()
Deco.class1()
Deco.list()
Deco.decorator()
안녕하세요, 좋은 아침입니다.
오늘은 함수를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 클래스를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 리스트를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 데코레이터를 알아볼거에요.
수고하셨습니다.

- 반복되는 구문  print("안녕하세요, 좋은 아침입니다.")와 print("수고하셨습니다.")를

매번 반복하지 않도록 도와주는 것이 decorator 이다.

 

 

 

**decorator를 쓴 코드

def hello(func):
	def decorator():
    	print("안녕하세요, 좋은 아침입니다.")
        func()
        print("수고하셨습니다.")
    return decorator

@hello
def function():
    print("오늘은 함수를 알아볼거에요.")

@hello
def class():
    print("오늘은 클래스를 알아볼거에요.")
    
@hello    
def list():
    print("오늘은 리스트를 알아볼거에요.")
    
@hello    
def decorator():
    print("오늘은 데코레이터를 알아볼거에요.")

Deco.function()
Deco.class1()
Deco.list()
Deco.decorator()
안녕하세요, 좋은 아침입니다.
오늘은 함수를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 클래스를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 리스트를 알아볼거에요.
수고하셨습니다.
안녕하세요, 좋은 아침입니다.
오늘은 데코레이터를 알아볼거에요.
수고하셨습니다.

-decorator를 사용해 함수를 한 번 선언해준 후, 이후의 코드가 매우 간편해지고 가독성이 좋아짐.