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만 추가하면 됨

팀 코드 리뷰에서 긍정적인 반응을 얻었고, 다른 파싱 로직에도 점진적으로 적용 중이다.