반응형
프로그래밍 실력이 한 단계 도약하는 지점은 함수를 '실행 도구'가 아닌 '데이터'로 다루기 시작할 때입니다. 클로저, 제너레이터, 고차 함수 등 복잡한 로직을 우아하게 만드는 고급 함수 기법들을 살펴보겠습니다.
1. ❓ [Advanced Function] 개념의 실체
고급 함수란 함수를 인자로 전달하거나, 함수를 반환하거나, 혹은 함수 내부의 상태를 기억하는 등의 확장된 기능을 가진 함수를 의미합니다. 이는 코드의 재사용성을 극대화하고, 메모리 효율을 높이며, 선언적인 코드 작성을 가능하게 합니다.
2. 🔍 주요 원인 분석 (체크리스트)
내 코드가 너무 길고 복잡하거나, 클래스를 만들기엔 과하다고 느껴진다면 아래 기법들이 필요한 신호입니다.
- ✅ 상태 유지의 필요성: 특정 변수 값을 유지해야 하지만, 클래스(Class)를 선언하기에는 로직이 너무 단순한가? (Closure 활용)
- ✅ 대용량 데이터 처리: 수백만 개의 데이터를 리스트에 담느라 메모리 부족(OOM) 에러가 발생하는가? (Generator 활용)
- ✅ 중복되는 함수 구조: 함수의 틀은 같은데 내부 로직만 조금씩 달라 코드가 중복되는가? (Higher-Order Function 활용)
- ✅ 지연 평가(Lazy Evaluation): 결과가 실제로 필요할 때까지 연산을 미루어 성능을 최적화해야 하는가?
3. 🛠️ 실전! 해결 방법
💻 Closure: 함수 안에 상태를 숨기기
클로저를 사용하면 전역 변수를 쓰지 않고도 함수 내부에 상태를 안전하게 저장할 수 있습니다.
Python
# ✅ 클로저 예시: 누적 합계 계산기
def make_accumulator():
total = 0 # 이 상태가 기억됩니다.
def add(value):
nonlocal total
total += value
return total
return add
acc = make_accumulator()
print(acc(10)) # 결과: 10
print(acc(20)) # 결과: 30 (이전 10을 기억함)
💻 Generator: 메모리 효율의 극대화
yield 키워드를 사용하면 모든 데이터를 메모리에 올리지 않고 필요할 때마다 하나씩 생성합니다.
Python
# ✅ 제너레이터 예시: 무한 시퀀스 또는 대용량 데이터
def huge_data_generator(limit):
n = 0
while n < limit:
yield n
n += 1
# 1억 개의 데이터를 리스트로 만들면 메모리가 터지지만, 제너레이터는 안전합니다.
data = huge_data_generator(100000000)
print(next(data)) # 0
print(next(data)) # 1
💻 Currying (Partial): 함수의 재구성
functools.partial을 사용하면 기존 함수의 인자 일부를 고정하여 새로운 함수를 만들 수 있습니다.
Python
from functools import partial
def power(base, exponent):
return base ** exponent
# 지수가 2로 고정된 '제곱 함수'를 새로 만듭니다.
square = partial(power, exponent=2)
cube = partial(power, exponent=3)
print(square(5)) # 25
print(cube(5)) # 125
4. 💡 시니어의 조언: "인사이트 한 줄"
"고급 함수는 양날의 검입니다. 코드를 줄여주지만 독해 난이도를 높이죠. 동료가 10초 안에 이해하지 못한다면 차라리 명시적인 코드가 낫습니다."
반응형
'개발 > Python' 카테고리의 다른 글
| [고급반] Step 4. Optimization & Memory: 효율적인 코드를 위한 자원 관리의 미학 (0) | 2026.01.05 |
|---|---|
| [고급반] Step 3. Concurrency & Parallel: 멀티태스킹의 두 얼굴 완벽 이해하기 (0) | 2026.01.05 |
| [고급반] Step 1. Pythonic Code & Meta: 파이썬답게 생각하고 코드를 설계하는 법 (0) | 2026.01.05 |
| [중급반] Step 6. 메타 프로그래밍과 자원 관리: Metaclass와 Context Manager (0) | 2025.12.26 |
| [중급반] Step 5. 병렬성과 동시성: Multiprocessing과 Asyncio (0) | 2025.12.26 |