본문 바로가기
language/python

함수, 매개변수, *args, **kwargs, 스코프, 클로저, 데코레이터 – Python 함수 구조 정리

by 죄니안죄니 2025. 4. 19.

들어가며

Python에서 함수는 단순한 재사용 블록을 넘어서, 일급 객체로 다뤄지고, 내부 스코프와 클로저 개념을 포함해 매우 유연하고 강력한 기능을 제공합니다.
또한 다양한 방식의 인자 전달 방식 (*args, **kwargs)과 데코레이터 패턴은 Python 개발자로 성장하는 데 필수적인 주제입니다.

이 글에서는 Python 함수의 정의부터 고급 개념인 스코프, 클로저, 데코레이터까지 예제 중심으로 정리합니다.

 
 

1. 함수 정의와 호출

def greet(name):
    print(f"Hello, {name}!")

greet("Tom")
  • def 키워드로 정의
  • () 안의 매개변수를 통해 외부 값을 전달

함수는 호출 전에도 객체로 취급됩니다:

print(greet)  # <function greet at 0x...>

2. 매개변수의 다양한 전달 방식

✅ 기본 인자

def repeat(text, times=2):
    print(text * times)

✅ 위치 인자 (*args)

def add_all(*args):
    return sum(args)

add_all(1, 2, 3, 4)  # → 10
  • 튜플 형태로 받음
  • 가변 개수의 인자를 처리할 때 유용

✅ 키워드 인자 (**kwargs)

def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

show_info(name="Alice", age=30)
  • 딕셔너리 형태로 받음
  • 키워드 기반 인자 처리에 적합

3. 스코프(Scope)와 지역 변수

x = 10

def foo():
    x = 5  # 지역 변수
    print(x)

foo()     # 5
print(x)  # 10

전역 변수 접근

global_var = 100

def modify():
    global global_var
    global_var += 1
  • 함수 내부에서 전역 변수 수정 시 global 키워드 필요

4. 클로저 (Closure)

함수 안에 함수가 정의되고, 내부 함수가 외부 함수의 지역 변수를 참조할 수 있는 구조

def outer(x):
    def inner():
        return x + 1
    return inner

f = outer(10)
print(f())  # → 11
  • xouter()의 지역 변수이지만, inner() 안에서 살아있음
  • 클로저는 상태를 기억하는 함수를 만들 수 있음

5. 데코레이터 (Decorator)

기존 함수를 수정하지 않고 기능을 확장하는 함수

기본 예제

def my_decorator(func):
    def wrapper():
        print("시작")
        func()
        print("끝")
    return wrapper

@my_decorator
def hello():
    print("안녕하세요")

hello()
# 시작 → 안녕하세요 → 끝
  • @ 기호로 데코레이터를 함수에 적용
  • 로깅, 인증, 실행 시간 측정 등에 활용됨

마치며

Python 함수는 단순한 반복 제거 도구를 넘어,
유연한 인자 처리, 클로저 기반 함수형 프로그래밍, 데코레이터 기반 AOP 구현까지 가능합니다.

함수의 구조를 제대로 이해하면 더 확장 가능하고 재사용 가능한 코드를 작성할 수 있습니다.

📂 다음 글에서는:

  • 람다(lambda) 함수
  • 고차 함수(map, filter, reduce)
  • partial 함수와 functools

등 Python 함수형 프로그래밍 문법을 이어서 다루겠습니다.

 


📌 
이전 글 보러가기
👉 조건문, 반복문, 리스트 컴프리헨션 – Python 제어 흐름 완전 정복
📌 
다음 글 미리보기
👉 클래스, 상속, dunder 메서드(__init__, __str__, __repr__ 등)

📚 언어 Python 시리즈 전체 보기
👉 https://jobreview.tistory.com/category/language/python

댓글