Python 3.14 패턴 매칭 개선과 실무 활용
배경
외부 API 응답을 파싱하는 코드가 복잡해지면서 if-elif 체인이 길어졌다. Python 3.10에서 도입된 패턴 매칭을 3.14 버전의 개선사항과 함께 적용해봤다.
기존 코드
def parse_response(data):
if isinstance(data, dict) and 'status' in data:
if data['status'] == 'success' and 'result' in data:
return process_success(data['result'])
elif data['status'] == 'error' and 'message' in data:
return handle_error(data['message'])
elif isinstance(data, list):
return [parse_response(item) for item in data]
return None
개선 코드
def parse_response(data):
match data:
case {'status': 'success', 'result': result}:
return process_success(result)
case {'status': 'error', 'message': msg}:
return handle_error(msg)
case [*items]:
return [parse_response(item) for item in items]
case _:
return None
3.14 개선사항 활용
가드 조건이 더 직관적으로 표현 가능해졌다.
match response:
case {'data': data, 'count': n} if n > 0:
return data[:n]
case {'data': data, 'filter': criteria}:
return apply_filter(data, criteria)
결과
- 중첩 if문 제거로 인덴트 단계 감소
- 타입과 구조 검증이 패턴에 포함되어 명확함
- 새로운 응답 타입 추가 시 case만 추가하면 됨
팀 코드 리뷰에서 긍정적인 반응을 얻었고, 다른 파싱 로직에도 점진적으로 적용 중이다.