17. [파이썬] ν΄λ‘œμ €μ™€ λ°μ½”λ ˆμ΄ν„°

2026. 3. 8. 12:03Β·Python & SQL/Python Basics
πŸ’‘ λ³Έ ν¬μŠ€νŒ…μ€ μˆ˜μ—… λ‚΄μš©, ꡐ재, ChatGPTλ₯Ό μ°Έκ³ ν•˜μ—¬ μ •λ¦¬ν•œ ν•™μŠ΅ κΈ°λ‘μž…λ‹ˆλ‹€.
κΈ€κ³Ό κ·Έλ¦Ό λ“± λͺ¨λ“  μ½˜ν…μΈ μ˜ μ •리 λ° μž‘성은 λ³Έ λΈ”λ‘œκ·Έμ—μ„œ μ§μ ‘ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

Python κΈ°μ΄ˆλΆ€ν„° Streamlit λ°μ΄ν„° μ‹œκ°ν™”κΉŒμ§€ μ •λ¦¬ν•˜λŠ” ν•™μŠ΅ κΈ°λ‘μž…λ‹ˆλ‹€.

이 글은 '17. [파이썬] ν΄λ‘œμ €μ™€ λ°μ½”λ ˆμ΄ν„°' μž…λ‹ˆλ‹€.

 


Pythonμ—μ„œλŠ” ν•¨μˆ˜ μ•ˆμ— λ˜ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  μˆ˜ μžˆλ‹€.

이처럼 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ •μ˜λ˜λŠ” ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜λ©΄ ν•¨μˆ˜μ˜ λ™μž‘을 ν™•μž₯ν•˜κ±°λ‚˜ νŠΉμ • κΈ°λŠ₯을 μΆ”κ°€ν•  μˆ˜ μžˆλ‹€.

 

λŒ€ν‘œμ μΈ κ°œλ…μ΄ ν΄λ‘œμ €(Closure) μ™€ λ°μ½”λ ˆμ΄ν„°(Decorator) μ΄λ‹€.

이 λ‘ κ°œλ…μ€ Python의 ν•¨μˆ˜ κ°μ²΄ νŠΉμ„±μ„ μ΄ν•΄ν•˜λŠ” λ° μ€‘μš”ν•œ μš”μ†Œμ΄λ©°, μ‹€μ œ μ½”λ“œμ—μ„œλ„ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ ν™œμš©λœλ‹€.

이번 κΈ€μ—μ„œλŠ” μ€‘첩 ν•¨μˆ˜, ν΄λ‘œμ €, λ°μ½”λ ˆμ΄ν„°μ˜ κ°œλ…κ³Ό κΈ°λ³Έ κ΅¬μ‘°λ₯Ό μ •리해본닀.

 

 

쀑첩 ν•¨μˆ˜ (Nested Function)

Pythonμ—μ„œλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ— λ˜ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  μˆ˜ μžˆλ‹€.

이λ₯Ό μ€‘첩 ν•¨μˆ˜(nested function) λΌκ³  ν•œλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό κ°™μ€ μ½”λ“œκ°€ μžˆλ‹€.

def outer():
    
    def inner():
        print("inner function")

    inner()

 

ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‚΄λΆ€ ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

outer()

 

μ‹€ν–‰ κ²°κ³Ό

inner function

 

이처럼 ν•¨μˆ˜ μ•ˆμ— μ •μ˜λœ ν•¨μˆ˜λŠ” μ™ΈλΆ€ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€.

 

 

ν΄λ‘œμ € (Closure)

ν΄λ‘œμ €λŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό κΈ°μ–΅ν•˜λŠ” λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.

λ‹€μŒ μ˜ˆμ œλ₯Ό μ‚΄νŽ΄λ³΄μž.

def outer(msg):

    def inner():
        print(msg)

    return inner

 

이 ν•¨μˆ˜λŠ” λ‚΄λΆ€ ν•¨μˆ˜ inner λ₯Ό λ°˜ν™˜ν•œλ‹€.

func = outer("Hello Python")
func()

 

μ‹€ν–‰ κ²°κ³Ό

Hello Python

μ—¬κΈ°μ„œ inner ν•¨μˆ˜λŠ” outer ν•¨μˆ˜μ˜ λ³€μˆ˜ msgλ₯Ό κ³„속 κΈ°μ–΅ν•˜κ³  μžˆλ‹€.

즉, ν΄λ‘œμ €λŠ” μ™ΈλΆ€ ν•¨μˆ˜ λ³€μˆ˜ + λ‚΄λΆ€ ν•¨μˆ˜κ°€ ν•¨κ»˜ λ¬Άμ—¬ λ™μž‘ν•˜λŠ” ꡬ쑰이닀.

 

 

ν΄λ‘œμ € νŠΉμ§•

ν΄λ‘œμ €μ˜ νŠΉμ§•μ„ μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ •μ˜λœ ν•¨μˆ˜
  • μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό κΈ°μ–΅
  • ν•¨μˆ˜ κ°μ²΄λ₯Ό λ°˜ν™˜

이 κ΅¬μ‘°λ₯Ό ν™œμš©ν•˜λ©΄ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ μˆ˜ μžˆλ‹€.

예λ₯Ό λ“€μ–΄ μΉ΄μš΄ν„° ν•¨μˆ˜λ₯Ό λ§Œλ“€ μˆ˜ μžˆλ‹€.

def counter():

    count = 0

    def increment():
        nonlocal count
        count += 1
        return count

    return increment

 

μ‚¬μš© μ˜ˆμ‹œ

c = counter()

print(c())
print(c())
print(c())

 

μ‹€ν–‰ κ²°κ³Ό

1
2
3

 

이처럼 ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ λ‚΄λΆ€ μƒνƒœλ₯Ό μœ μ§€ν•  μˆ˜ μžˆλ‹€.

 

 

λ°μ½”λ ˆμ΄ν„° (Decorator)

λ°μ½”λ ˆμ΄ν„°λŠ” ν•¨μˆ˜λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” λ°©λ²•이닀.

Pythonμ—μ„œλŠ” ν•¨μˆ˜λ„ 객체이기 λ•Œλ¬Έμ— ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ˜ μΈμžλ‘œ μ „달할 μˆ˜ μžˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒ μ½”λ“œλ₯Ό λ³΄μž.

def decorator(func):

    def wrapper():
        print("start")
        func()
        print("end")

    return wrapper

 

μ‹€ν–‰ κ²°κ³Ό

start
hello
end

 

이처럼 μ›λž˜ ν•¨μˆ˜μ— μΆ”κ°€ κΈ°λŠ₯을 κ°μ‹ΈλŠ” ν˜•νƒœλ‘œ λ™μž‘ν•œλ‹€.

 

 

λ°μ½”λ ˆμ΄ν„° λ¬Έλ²•

Pythonμ—μ„œλŠ” λ°μ½”λ ˆμ΄ν„°λ₯Ό @ λ¬Έλ²•μœΌλ‘œ κ°„λ‹¨ν•˜κ²Œ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€.

import time

def timer(func):

    def wrapper():
        start = time.time()
        func()
        end = time.time()

        print("μ‹€ν–‰ μ‹œκ°„:", end - start)

    return wrapper

 

μ‚¬μš© μ˜ˆμ‹œ

@timer
def process():
    for i in range(1000000):
        pass

process()

이처럼 λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ— κ³΅ν†΅ κΈ°λŠ₯을 μ‰½κ²Œ μΆ”κ°€ν•  μˆ˜ μžˆλ‹€.

 

 

정리

ν΄λ‘œμ €μ™€ λ°μ½”λ ˆμ΄ν„°λŠ” Pythonμ—μ„œ ν•¨μˆ˜μ˜ λ™μž‘을 ν™•μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ€‘μš”ν•œ κ°œλ…μ΄λ‹€.

ν΄λ‘œμ €λŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό κΈ°μ–΅ν•˜λŠ” λ‚΄λΆ€ ν•¨μˆ˜ κ΅¬μ‘°μ΄λ©°,

λ°μ½”λ ˆμ΄ν„°λŠ” κΈ°μ‘΄ ν•¨μˆ˜μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” λ°©λ²•이닀.

 

μ΄λŸ¬ν•œ κΈ°λŠ₯을 ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 곡톡 λ‘œμ§μ„ νš¨μœ¨μ μœΌλ‘œ κ΄€λ¦¬ν•  μˆ˜ μžˆλ‹€.

 

λ‹€μŒ κΈ€μ—μ„œλŠ” Python ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ‘°μ μœΌλ‘œ κ΅¬μ„±ν•˜κΈ° μœ„ν•œ λͺ¨λ“ˆκ³Ό ν”„λ‘œμ νŠΈ κ΅¬μ‘°λ₯Ό μ‚΄νŽ΄λ³Έλ‹€.

 

 

'Python & SQL > Python Basics' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

19. [파이썬] μ •λ ¬ 기술과 μœ μš©ν•œ μœ ν‹Έ ν•¨μˆ˜  (0) 2026.03.08
18. [파이썬] λͺ¨λ“ˆκ³Ό ν”„λ‘œμ νŠΈ ꡬ쑰  (2) 2026.03.08
16. [파이썬] class methos vs static method  (2) 2026.03.08
15. [파이썬] 정보은닉과 클래슀 λ‚΄λΆ€ ꡬ쑰  (2) 2026.03.08
14. [파이썬] μŠ€νŽ˜μ…œ λ©”μ†Œλ“œμ™€ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©  (2) 2026.03.08
'Python & SQL/Python Basics' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • 19. [파이썬] μ •λ ¬ 기술과 μœ μš©ν•œ μœ ν‹Έ ν•¨μˆ˜
  • 18. [파이썬] λͺ¨λ“ˆκ³Ό ν”„λ‘œμ νŠΈ ꡬ쑰
  • 16. [파이썬] class methos vs static method
  • 15. [파이썬] 정보은닉과 클래슀 λ‚΄λΆ€ ꡬ쑰
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (170) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (5)
        • Project Portfolio (5)
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (84)
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (10)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • λ°©λͺ…둝
  • 링크

    • GitHub
    • WikiDocs
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    machine learning
    μžλ°”
    λ¨Έμ‹ λŸ¬λ‹
    share.streamlit.io
    λΆˆμ–΄ κ΄€κ³„λŒ€λͺ…사
    μ–΄λ¦°μ™•μž ν”„λž‘μŠ€μ–΄
    파이썬 문제
    파이썬
    볡합과거
    Python
    λ§₯ git
    python problem
    Stata
    python streamlit
    ν”„λ‘œμ νŠΈ 였일러
    ν”„λž‘μŠ€μ–΄ 곡뢀
    MySQL
    streamlit
    파이썬 streamlit
    μ ν”„νˆ¬νŒŒμ΄μ¬ μ—°μŠ΅λ¬Έμ œ 풀이
    μ ν”„νˆ¬νŒŒμ΄μ¬ μ—°μŠ΅λ¬Έμ œ
    μ–΄λ¦°μ™•μž λΆˆμ–΄
    GIT
    파이썬 크둀링
    객체
    Github
    초보자λ₯Ό μœ„ν•œ 파이썬 300제
    Le Petit Prince
    passe compose
    λΆˆμ–΄ 곡뢀
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
J. Son
17. [파이썬] ν΄λ‘œμ €μ™€ λ°μ½”λ ˆμ΄ν„°
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”