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가 발생할 수 있음 (덧셈에서 문자열과 정수의 타입 불일치)
위의 코드에서 name
은 str
타입이어야 한다고 명시했지만, 실제로 int
나 list
타입을 넣더라도 오류는 발생하지 않습니다. 타입 힌팅은 코드에서 문서화와 같은 역할을 수행하며, 개발자가 실수하지 않도록 도움을 주고 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)
위 예시에서 age
는 int
로 지정되어 있지만 문자열 "25"
를 넣더라도 Pydantic이 이를 자동으로 int
로 변환하여 처리합니다. 만약 변환이 불가능한 데이터(예: age="twenty-five"
)가 입력되면, ValueError
예외를 발생시켜 실행 시점에서 타입 검사를 강제합니다.
차이점 요약
기능/특징 | 타입 힌팅 (Type Hinting) | Pydantic |
---|---|---|
목적 | 코드의 가독성 향상, IDE 지원, 자동 완성 개선 | 데이터 유효성 검사 및 타입 강제 적용 |
실행 시 검증 | 없음 (실행 시 타입이 검증되지 않음) | 있음 (실행 시 타입 검증과 데이터 변환을 수행) |
자동 데이터 변환 | 없음 | 있음 (가능한 경우 데이터 자동 변환) |
주요 용도 | 코드 문서화, 개발자 지원 | 입력 데이터의 유효성 검사 및 보정 |
사용 위치 | 모든 Python 코드에 기본적으로 사용 가능 | Pydantic 라이브러리가 필요한 곳에서만 사용 가능 |
결론
- 타입 힌팅은 코드 가독성을 높이고 IDE의 자동 완성과 같은 개발 지원 기능을 강화하는 데 유용합니다. 그러나 실제 실행 시에는 타입을 강제하지 않습니다.
- Pydantic은 타입 힌팅과 함께 실제 데이터 유효성 검사를 수행하여, 데이터가 모델 정의와 일치하도록 강제합니다. 이는 특히 API 응답 처리, 사용자 입력 검증 등 데이터가 외부에서 들어오는 경우에 유용합니다.
즉, Pydantic은 타입 힌팅의 기능을 확장하여 실행 시점에서 데이터 유효성 검사 및 강제 타입 변환을 수행하는 도구라고 할 수 있습니다.
'사용툴 분석' 카테고리의 다른 글
Union이 뭐고 왜 사용하는가? (1) | 2024.11.08 |
---|---|
피클(pkl)과 json의 차이. (2) | 2024.10.03 |
RabbitMQ로 우선순위 큐 실제 적용해보자 (0) | 2024.10.02 |
메타데이터 활용한 코딩들 (0) | 2024.10.02 |
TypedDict의 개념과 langsmith (1) | 2024.09.08 |