안녕하세요! 오늘은 파이썬 코드 리팩토링의 핵심 원칙과 실전 테크닉에 대해 자세히 알아보겠습니다.
리팩토링이란? 🤔
리팩토링은 기존 코드의 동작은 유지하면서 내부 구조를 개선하는 과정입니다.
마치 집 안의 가구를 재배치하면서 더 효율적인 공간을 만드는 것과 같죠!
리팩토링의 주요 원칙 🌟
1. 코드 가독성 (Readability)
# 개선 전
def c(d):
r = 0
for i in d:
r += i
return r
# 개선 후
def calculate_sum(numbers):
"""숫자 리스트의 합계를 계산합니다."""
total = 0
for number in numbers:
total += number
return total
2. 함수 모듈화 (Function Modularity)
# 개선 전
def process_user_data(user_id):
user = db.get_user(user_id)
if user:
name = user.name
email = user.email
age = calculate_age(user.birthdate)
points = calculate_points(user.purchases)
return {'name': name, 'email': email, 'age': age, 'points': points}
return None
# 개선 후
def get_user_profile(user_id):
"""사용자 프로필 정보를 조회합니다."""
user = get_user_from_database(user_id)
return create_user_profile(user) if user else None
def create_user_profile(user):
"""사용자 프로필 객체를 생성합니다."""
return {
'name': user.name,
'email': user.email,
'age': calculate_age(user.birthdate),
'points': calculate_points(user.purchases)
}
3. 코드 중복 제거 (DRY Principle)
# 개선 전
def validate_user_input(name, email):
if not name or len(name) < 2:
raise ValueError("이름은 최소 2자 이상이어야 합니다")
if not email or '@' not in email:
raise ValueError("올바른 이메일 형식이 아닙니다")
def validate_product_input(title, description):
if not title or len(title) < 2:
raise ValueError("제목은 최소 2자 이상이어야 합니다")
if not description or len(description) < 10:
raise ValueError("설명은 최소 10자 이상이어야 합니다")
# 개선 후
def validate_min_length(value, field_name, min_length):
"""필드 값의 최소 길이를 검증합니다."""
if not value or len(value) < min_length:
raise ValueError(f"{field_name}은(는) 최소 {min_length}자 이상이어야 합니다")
def validate_user_input(name, email):
validate_min_length(name, "이름", 2)
if not email or '@' not in email:
raise ValueError("올바른 이메일 형식이 아닙니다")
def validate_product_input(title, description):
validate_min_length(title, "제목", 2)
validate_min_length(description, "설명", 10)
4. 예외 처리 개선 (Exception Handling)
# 개선 전
def get_user_data():
try:
data = api.get_user()
return data
except:
return None
# 개선 후
def get_user_data():
"""사용자 데이터를 API로부터 안전하게 조회합니다."""
try:
return api.get_user()
except ConnectionError as e:
logger.error(f"API 연결 실패: {e}")
raise
except ValueError as e:
logger.warning(f"잘못된 사용자 데이터: {e}")
return None
except Exception as e:
logger.critical(f"예상치 못한 오류: {e}")
raise
리팩토링 체크리스트 ✅
변수명과 함수명
- 명확하고 설명적인 이름 사용
- 한글 주석 추가로 의도 명확히 표현
함수 크기
- 한 함수는 한 가지 작업만 수행
- 필요시 작은 함수들로 분리
모듈화
- 관련 기능끼리 모듈로 그룹화
- 재사용 가능한 단위로 분리
테스트 용이성
- 단위 테스트 작성 가능한 구조
- 의존성 주입을 통한 테스트 용이성 확보
실전 적용 예시 💡
설정 관리 리팩토링
# 개선 전
DB_HOST = "localhost"
DB_PORT = 5432
DB_NAME = "myapp"
# 개선 후
from dataclasses import dataclass
@dataclass
class DatabaseConfig:
"""데이터베이스 설정을 관리하는 클래스입니다."""
host: str = "localhost"
port: int = 5432
name: str = "myapp"
def get_connection_string(self) -> str:
"""데이터베이스 연결 문자열을 생성합니다."""
return f"postgresql://{self.host}:{self.port}/{self.name}"
마치며 🎁
리팩토링은 한 번에 완벽하게 할 수 있는 작업이 아닙니다.
지속적인 개선과 관심이 필요한 과정이에요.
이 가이드를 참고하여 조금씩 코드를 개선해 나가시길 바랍니다!
References:
- Clean Code: A Handbook of Agile Software Craftsmanship - Robert C. Martin
- Refactoring: Improving the Design of Existing Code - Martin Fowler
- Python Clean Code Documentation - PEP 8
- The Pragmatic Programmer - Andrew Hunt & David Thomas
728x90
'800===Dev Docs and License > Clean Code' 카테고리의 다른 글
파이썬 코드 리팩토링 마스터 가이드 - Part 3: 코드 테스트와 유지보수성 향상 🧪 (0) | 2025.01.07 |
---|---|
파이썬 코드 리팩토링 마스터 가이드 - Part 2: 성능 최적화 핵심 가이드 💫 (0) | 2025.01.07 |
파이썬 코드 리팩토링 마스터 가이드 - Part 1: 코드 구조 개선 🎯 (0) | 2025.01.07 |
SOLID 원칙 완벽 가이드 🚀 (1) | 2024.12.06 |
코드 품질 향상을 위한 대형 메서드 분리 기법 🚀 (1) | 2024.12.06 |