사용툴 분석

Type Hinting과 Pydantic 차이

필만이 2024. 11. 8. 14:01

Pydantic타입 힌팅(type hinting)은 모두 코드에서 데이터 타입을 명시하는 데 도움을 주지만, 그 목적과 기능은 서로 다릅니다.

1. 타입 힌팅 (Type Hinting)

타입 힌팅은 코드에서 변수, 함수 매개변수, 반환값 등에 타입 정보를 명시하는 기능입니다. Python에서는 타입 힌팅을 통해 코드 가독성과 안정성을 높일 수 있지만, 실행 시에 실제로 타입 검사를 수행하지는 않습니다. 즉, 타입 힌팅은 개발자와 IDE에게 타입 정보를 제공할 뿐이며, 코드 실행 중에 데이터 타입을 강제하지 않습니다.

예시: 타입 힌팅

def add_numbers(a: int, b: int) -> int:
    return a + b

# 잘못된 타입을 넣어도 에러가 발생하지 않음 (실행 시점에서 검증이 이루어지지 않음)
result = add_numbers(10, "20")  # 이 코드에서는 문자열을 넣어도 실행 오류가 발생하지 않음
print(result)  # TypeError가 발생할 수 있음 (덧셈에서 문자열과 정수의 타입 불일치)

위의 코드에서 namestr 타입이어야 한다고 명시했지만, 실제로 intlist 타입을 넣더라도 오류는 발생하지 않습니다. 타입 힌팅은 코드에서 문서화와 같은 역할을 수행하며, 개발자가 실수하지 않도록 도움을 주고 IDE가 자동 완성을 더 잘 제공하게 만듭니다.

2. Pydantic

Pydantic은 데이터 유효성 검사와 데이터 타입 강제 적용을 위해 설계된 라이브러리입니다. Pydantic 모델에서는 타입 힌트를 사용해 필드의 타입을 정의할 수 있으며, 실제로 코드가 실행될 때 Pydantic이 입력 데이터의 타입을 검사하고, 유효성을 확인합니다. Pydantic은 유효하지 않은 데이터를 자동으로 거르고, 가능한 경우 지정된 타입으로 데이터를 변환합니다.

예시: Pydantic

from pydantic import BaseModel, ValidationError

class User(BaseModel):
    name: str
    age: int

# 올바른 데이터
user = User(name="Alice", age="25")  # 문자열 "25"가 자동으로 정수 25로 변환됨
print(user)

# 잘못된 데이터로 인한 예외 처리
try:
    invalid_user = User(name="Bob", age="twenty-five")  # "twenty-five"는 정수로 변환 불가
except ValidationError as e:
    print("Validation error:", e)

위 예시에서 ageint로 지정되어 있지만 문자열 "25"를 넣더라도 Pydantic이 이를 자동으로 int로 변환하여 처리합니다. 만약 변환이 불가능한 데이터(예: age="twenty-five")가 입력되면, ValueError 예외를 발생시켜 실행 시점에서 타입 검사를 강제합니다.

차이점 요약

기능/특징 타입 힌팅 (Type Hinting) Pydantic
목적 코드의 가독성 향상, IDE 지원, 자동 완성 개선 데이터 유효성 검사 및 타입 강제 적용
실행 시 검증 없음 (실행 시 타입이 검증되지 않음) 있음 (실행 시 타입 검증과 데이터 변환을 수행)
자동 데이터 변환 없음 있음 (가능한 경우 데이터 자동 변환)
주요 용도 코드 문서화, 개발자 지원 입력 데이터의 유효성 검사 및 보정
사용 위치 모든 Python 코드에 기본적으로 사용 가능 Pydantic 라이브러리가 필요한 곳에서만 사용 가능

결론

  • 타입 힌팅은 코드 가독성을 높이고 IDE의 자동 완성과 같은 개발 지원 기능을 강화하는 데 유용합니다. 그러나 실제 실행 시에는 타입을 강제하지 않습니다.
  • Pydantic은 타입 힌팅과 함께 실제 데이터 유효성 검사를 수행하여, 데이터가 모델 정의와 일치하도록 강제합니다. 이는 특히 API 응답 처리, 사용자 입력 검증 등 데이터가 외부에서 들어오는 경우에 유용합니다.

즉, Pydantic은 타입 힌팅의 기능을 확장하여 실행 시점에서 데이터 유효성 검사 및 강제 타입 변환을 수행하는 도구라고 할 수 있습니다.