들어가며
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
- x는 outer()의 지역 변수이지만, 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
'language > python' 카테고리의 다른 글
예외 처리 (try-except)와 사용자 정의 예외 – Python 오류 처리 구조 이해하기 (0) | 2025.04.19 |
---|---|
클래스, 상속, dunder 메서드 – Python 객체지향 기초 정리 (0) | 2025.04.19 |
조건문, 반복문, 리스트 컴프리헨션 – Python 제어 흐름 완전 정복 (0) | 2025.04.19 |
리스트, 튜플, 딕셔너리, 셋 – Python 핵심 자료구조 비교와 활용 (0) | 2025.04.19 |
변수와 자료형, 그리고 Python의 동적 타이핑 이해하기 (1) | 2025.04.19 |
댓글