๋ฐ์ฝ๋ ์ดํฐ๋ ํจ์๋ฅผ ์์ ํ์ง ์์ ์ํ์์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
๊ณ ๊ฐ ์๋ด ์ผํฐ ์ง์ ๊น์ ํ๋์ ํ์ฌ ๊ท์ ์ ๋ฐ๋ผ ์ ํ๋ฅผ ๊ฑธ๊ฑฐ๋ ๋ฐ์ ๋๋ง๋ค ๋ณธ์ธ ๋ถ์, ๋ณธ์ธ ์ด๋ฆ์ ๋ฐํ ๋ค์ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ ์ ์๋ค.
def greeting():
print('์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.')
print('๋ฐ์ผ์ฑ ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?')
greeting()
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
๋ฐ์ผ์ฑ ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?
๋ฌธ์ ์ : ๋ฐ์ผ์ฑ๋์ ์ ํ๊ฐ ์๋ ๋ค๋ฅธ ๊ณ ๊ฐ์ ์ ํ, ๋๋ ํ์ฌ ๋๋ฃํํ ๋ฌด์์ ์ง๋ฌธํ ๋๋ '์๋ ํ์ธ์ ~ ์์ ~ ๊น์ ํ์ ๋๋ค.' ์ธ์ฌ๋ฅผ ๋ฐ๋ณตํด์ผ ํ๋ค. ์ธ์ฌ๋ฅผ ๋งค๋ฒ ํ๊ธฐ๋ ๊ท์ฐฎ๊ณ ! ์ฌ๋์ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์์ด๋ฒ๋ฆฌ๊ณ ์ํ ์๋ ์๋ค! ๊ฐ๋จํ ๋ฐ์ฝ๋ ์ดํฐ๋ก ๊น์ ํ๋์ ๋์๋๋ฆด ์ ์๋ค.
def greeting(func):
def wrapper():
print('์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.')
func() # ์ง์ค์ง์ค!
return wrapper
def customer():
customer_name = '๋ฐ์ผ์ฑ'
print(f'{customer_name} ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?')
def question():
employee_name = 'ํ๋ฆฝ์ค'
print(f'{employee_name}๋ ํน์ ์๊ฐ ๊ด์ฐฎ์ผ์๋ค๋ฉด ๋ญ ํ๋ ์ฌ์ญค๋ด๋ ๋ ๊น์?')
greeting_customer = greeting(customer)
greeting_customer()
greeting_question = greeting(question)
greeting_question()
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
๋ฐ์ผ์ฑ ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
ํ๋ฆฝ์ค๋ ํน์ ์๊ฐ ๊ด์ฐฎ์ผ์๋ค๋ฉด ๋ญ ํ๋ ์ฌ์ญค๋ด๋ ๋ ๊น์?
๊น์ ํ๋์ ์ด์ ์ธ์ฌ์ง์ฅ์์ ๋น ์ ธ ๋์ค์ จ๋ค.
@์ ์ฐ๋ฉด ๋ ๊ฐํธํ๊ฒ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๊ตฌํํ ์ ์๋ค.
@decorator
def new_function():
...
def greeting(func):
def wrapper():
print('์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.')
func()
return wrapper
@greeting
def customer():
customer_name = '๋ฐ์ผ์ฑ'
print(f'{customer_name} ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?')
@greeting
def question():
employee_name = 'ํ๋ฆฝ์ค'
print(f'{employee_name}๋ ํน์ ์๊ฐ ๊ด์ฐฎ์ผ์๋ค๋ฉด ๋ญ ํ๋ ์ฌ์ญค๋ด๋ ๋ ๊น์?')
customer()
question()
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
๋ฐ์ผ์ฑ ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
ํ๋ฆฝ์ค๋ ํน์ ์๊ฐ ๊ด์ฐฎ์ผ์๋ค๋ฉด ๋ญ ํ๋ ์ฌ์ญค๋ด๋ ๋ ๊น์?
์์ trace() ์ผ๋ ๋ฐฉ๋ฒ๊ณผ ๋๊ฐ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋์จ ๊ฒ์ ํ์ธํ ์ ์๋ค~~
์ฌ๋ฌ๊ฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํ๋์ ํจ์์ ์ง์ ํ ์ ์๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ ์์์ ์๋๋ก ์คํ๋๋ค!
์๋๋ฆฌ์ค | ํน๋ณ ์ด๋ฒคํธ ํ์ฌ ๊ธฐ๊ฐ์ด๋ผ ๊น์ ํ๋์ ๋ชจ๋ ์๋ด ๊ณ ๊ฐ๋๊ป ํ์ฌ ์๊ฐ์ ๊ดํ ์ ๋ณด๋ ์ถ๊ฐ๋ก ์ ๋ฌํด์ผ ํ๋ค.
def special_event(func):
def wrapper():
print('์ง๊ธ ํน๋ณ ์ด๋ฒคํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. ์๋ด ์ ํ ํ ์ ์์ผํฐ ํํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์๋ฉด ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.')
func()
return wrapper
def greeting(func):
def wrapper():
print('์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.')
func()
return wrapper
@greeting
@special_event
def customer():
customer_name = '๋ฐ์ผ์ฑ'
print(f'{customer_name} ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?')
customer()
์๋
ํ์ธ์ ์ ์์ผํฐ ๊ณ ๊ฐ ์ผํฐ 1ํ ์์ ์ง์ ๊น์ ํ์
๋๋ค.
์ง๊ธ ํน๋ณ ์ด๋ฒคํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. ์๋ด ์ ํ ํ ์ ์์ผํฐ ํํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์๋ฉด ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
๋ฐ์ผ์ฑ ๊ณ ๊ฐ๋๊ป์ <๋
ธํธ๋ถ ์๋ฆฌ> ์ค๋งํธ ๋ค์ด์ผ ๋ฒํธ๋ฅผ ๋๋ฅด์
์ ํด๋น ๋ถ์๋ก ์ฐ๊ฒฐ๋์ต๋๋ค. ํน์ ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์?
์ด๋ฒคํธ์ ๊ดํ ์ฌํญ๋ @special_event
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํ์ฉํด ์ฑ๊ณต์ ์ผ๋ก ์ ๋ฌํ๋ค!
Reference:
https://medium.com/@hckcksrl/python-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-decorator-980fe8ca5276
https://dojang.io/mod/page/view.php?id=2427
๋ฐ์ฝ๋ ์ดํฐ ๋๋ฌด ์ด๋ ค์์...ใ ใ ์น์ ํ ์ค๋ช ํ๋ํ๋ ๋ฏ์ด๋ณด๊ณ ๊ฐ๋๋น!!