개발언어 Back-End/Python

함수안에 데이터클래스 정의의 용도와 사용 예시

bluebamus 2024. 3. 17.

 1. 사용 목적 :

   - 함수 안에서 데이터클래스를 정의하는 것은 특정 함수의 로컬 영역에서만 사용되는 데이터를 구조화하고 관리하기 위해서입니다. 이 방법은 코드의 가독성과 유지보수성을 높일 수 있으며, 해당 함수의 동작에 필요한 데이터 구조를 명확히 할 때 유용합니다.

 

 2. 데이터클래스 정의의 용도 :

   1) 구조화된 데이터 관리: 특정 함수 내에서만 사용될 데이터를 명확하게 구조화하여, 이해와 사용을 쉽게 합니다.

   2) 로컬 영역 제한 사용: 전역 영역에서 사용될 필요가 없는 데이터를 함수 내부에 한정하여 정의함으로써 네임스페이스를 깔끔하게 관리할 수 있습니다.

   3) 유지보수성 향상: 함수와 관련된 데이터를 가까운 곳에 위치시켜 변화에 따른 관리 편의성을 높입니다.

 

 3. 예시 :

  1) API 응답 데이터 처리 :

      - API로부터 받아온 응답 데이터를 처리하는 함수 내에서 데이터클래스를 정의하여 사용할 수 있습니다. API 응답의 구조를 데이터클래스로 미리 정의해두고, 응답 데이터를 해당 클래스의 인스턴스로 변환하여 사용함으로써, 데이터의 접근 및 관리가 용이해집니다.

def process_api_response(response_data):
    from dataclasses import dataclass

    @dataclass
    class ApiResponse:
        id: int
        name: str
        value: float

    # API 응답을 ApiResponse 인스턴스로 변환
    response = ApiResponse(**response_data)
    # 인스턴스 데이터 처리
    print(f"ID: {response.id}, Name: {response.name}, Value: {response.value}")

 

   2) 임시 데이터 적재 및 처리 : 

      - 복잡한 계산 과정에서 중간 결과를 임시적으로 저장하고 관리가 필요할 때, 함수 내에서 데이터클래스를 정의하여 사용할 수 있습니다. 각 단계의 결과를 잘 정의된 데이터클래스 인스턴스에 저장함으로써 코드의 가독성을 높이고 오류 가능성을 줄일 수 있습니다. 

def complex_calculation(input_data):
    from dataclasses import dataclass

    @dataclass
    class CalculationStep:
        step_result: float
        description: str

    # 계산 단계별 데이터 정리
    step1 = CalculationStep(input_data * 2, "첫 번째 단계 계산")
    step2 = CalculationStep(step1.step_result + 10, "두 번째 단계 계산")
    # 최종 결과 활용
    print(step2.description, " - 결과:", step2.step_result)

 

   3) 특정 도메인 모델의 로컬 표현 :

      - 함수가 특정 도메인에 국한된 데이터를 처리할 때, 그 도메인 모델을 표현하는 데이터클래스를 함수 내에서 정의하여 사용합니다. 이 방법은 도메인에 특화된 로직을 구현할 때 코드의 명확성과 관리성을 향상시킵니다.

def manage_local_inventory(inventory_items):
    from dataclasses import dataclass

    @dataclass
    class InventoryItem:
        name: str
        quantity: int

    local_inventory = [InventoryItem(name=item['name'], quantity=item['quantity']) for item in inventory_items]
    # 로컬 인벤토리 데이터 관리 및 사용
    for item in local_inventory:
        print(f"Item: {item.name}, Quantity: {item.quantity}")

댓글