안녕하세요! 오늘은 현업에서 실제로 자주 사용되는 파이썬의 심화 개념들을 실용적인 예시와 함께 살펴보겠습니다.
1. 데코레이터의 실전 활용 🎯
데코레이터는 함수나 클래스의 기능을 수정하거나 확장할 때 사용하는 강력한 도구입니다.
실무 사용 예시: API 요청 로깅
import functools
import time
import logging
def log_execution_time(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
logging.info(f"{func.__name__} 실행 시간: {end - start:.2f}초")
return result
return wrapper
@log_execution_time
def fetch_user_data(user_id):
# API 호출 로직
time.sleep(1) # API 호출 시뮬레이션
return {"id": user_id, "name": "홍길동"}
2. 컨텍스트 매니저 활용 🔄
파일 처리나 DB 연결 등 리소스 관리에 필수적인 기능입니다.
실무 사용 예시: DB 커넥션 관리
class DatabaseConnection:
def __init__(self, config):
self.config = config
self.conn = None
def __enter__(self):
self.conn = create_connection(self.config)
return self.conn
def __exit__(self, exc_type, exc_val, exc_tb):
if self.conn:
self.conn.close()
# 실제 사용
with DatabaseConnection(config) as conn:
data = conn.execute("SELECT * FROM users")
# 자동으로 connection 닫힘
3. 제너레이터의 메모리 최적화 💾
대용량 데이터 처리시 메모리 사용을 최적화할 수 있습니다.
실무 사용 예시: 대용량 로그 파일 분석
def process_large_log_file(filename):
def log_generator():
with open(filename) as f:
for line in f:
if "ERROR" in line:
yield line.strip()
# 메모리 효율적 처리
error_count = sum(1 for _ in log_generator())
return error_count
# 수백 MB의 로그 파일도 적은 메모리로 처리 가능
4. 비동기 프로그래밍 (asyncio) 🚀
I/O 바운드 작업을 효율적으로 처리할 수 있습니다.
실무 사용 예시: 다중 API 호출
import asyncio
import aiohttp
async def fetch_data(session, url):
async with session.get(url) as response:
return await response.json()
async def fetch_multiple_apis():
urls = [
'https://api1.example.com',
'https://api2.example.com',
'https://api3.example.com'
]
async with aiohttp.ClientSession() as session:
tasks = [fetch_data(session, url) for url in urls]
results = await asyncio.gather(*tasks)
return results
5. 메타클래스 활용 🎭
클래스 생성을 커스터마이즈할 때 사용됩니다.
실무 사용 예시: ORM 구현
class ModelMeta(type):
def __new__(cls, name, bases, attrs):
# 모든 필드 정보 수집
fields = {}
for key, value in attrs.items():
if isinstance(value, Field):
fields[key] = value
attrs['_fields'] = fields
return super().__new__(cls, name, bases, attrs)
class Model(metaclass=ModelMeta):
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
# 실제 모델 정의
class User(Model):
name = Field(str)
age = Field(int)
6. 함수형 프로그래밍 기법 🎯
데이터 처리를 더 깔끔하고 효율적으로 만들어줍니다.
실무 사용 예시: 데이터 변환 파이프라인
from functools import reduce
from operator import itemgetter
def process_sales_data(sales_records):
return (
sales_records
| map(itemgetter('amount')) # 금액만 추출
| filter(lambda x: x > 1000) # 1000원 초과 필터링
| reduce(lambda x, y: x + y) # 합계 계산
)
# 실제 사용
sales = [
{'id': 1, 'amount': 1500},
{'id': 2, 'amount': 800},
{'id': 3, 'amount': 2000}
]
total = process_sales_data(sales)
7. 타입 힌팅 활용 📝
코드의 가독성과 유지보수성을 높여줍니다.
실무 사용 예시: API 응답 처리
from typing import List, Dict, Optional
class UserResponse:
def __init__(self, data: Dict[str, any]):
self.id: int = data['id']
self.name: str = data['name']
self.email: Optional[str] = data.get('email')
def process_users(users: List[Dict]) -> List[UserResponse]:
return [UserResponse(user) for user in users]
마치며 🎁
파이썬의 심화 기능들은 단순히 "멋진 기능"이 아닌, 실제 문제를 해결하는 강력한 도구입니다. 적절한 상황에서 이러한 기능들을 활용하면 코드의 품질과 성능을 크게 향상시킬 수 있습니다.
더 자세한 내용이 궁금하시다면 댓글로 남겨주세요! 😊
728x90
'200===Dev Language > Python' 카테고리의 다른 글
Python 입문자를 위한 기본 문법 가이드 🐍 (0) | 2024.11.03 |
---|---|
Python Loop String (0) | 2024.06.01 |
Python Map(Dictionary) Manipulation (0) | 2024.06.01 |
Python List Manipulation (0) | 2024.06.01 |
Advanced Python Syntax (type hint) (0) | 2024.06.01 |