✅ Python 타입 힌트는 강제성이 있을까?
다음과 같은 함수가 있을 때:
def process(data: str) -> str:
return data.upper()
많은 사람들이 궁금해하는 질문:
"이렇게 타입 힌트를 써도, 사용자가 123 같은 숫자를 넣으면 어떻게 되는 걸까?"
🔍 타입 힌트의 본질
- Python의 타입 힌트는 정적 타입 검사 도구(mypy, pyright 등), IDE 자동완성, 문서화를 위한 것.
- 실행 시 강제되지 않는다.
예:
process(123) # ⚠️ 런타임 에러 발생 (AttributeError)
✅ 사용자 입력은 항상 문자열이지만...
user_input = input("Enter something: ")
process(user_input) # ✅ str이라 OK
하지만 외부 데이터나 API 요청 등은 어떤 타입이 들어올지 모른다.
🧤 해결책: 런타임에서 타입 검사를 추가하자
def process(data: str) -> str:
if not isinstance(data, str):
raise TypeError("data must be a string")
return data.upper()
이렇게 하면 타입 힌트는 지키되, 실시간 방어 로직도 갖추게 된다.
🎯 요약 정리
항목 설명
data: str | 타입 힌트 (개발자, 도구용) - 실행 시 강제 X |
-> str | 반환 타입 명시 (IDE, 문서, mypy용) |
사용자 입력 | input()은 str로 안전하지만, 외부 입력은 방어 필요 |
런타임 검사 | isinstance()로 타입을 검증하는 방어 코드 추가 |
💬 실무 팁
- 모든 외부 입력은 신뢰하지 말고 방어적으로 처리하자.
- 타입 힌트 + 런타임 체크 = 안정성과 가독성 모두 확보.
- FastAPI 같은 프레임워크는 Pydantic으로 자동 타입 검증도 가능함.
필요하다면 "Pydantic으로 타입 검증 자동화하는 법"도 이어서 설명해드릴게요 😎
'기술블로그-Fastapi편' 카테고리의 다른 글
📅 공공데이터포털 공휴일 API 사용법 총정리 (0) | 2025.05.26 |
---|---|
✅ isinstance() 함수 완전 정복 (0) | 2025.05.23 |
✅ Git 브랜치가 왜 main이 아닌 master일까? (0) | 2025.05.23 |
🐧 WSL + Python 3.13 + Poetry + PyCharm 프로젝트 설정 가이드 (Windows) (0) | 2025.05.23 |
🧹 Python 개발 환경 완전 초기화 및 Poetry 기반 재설정 가이드 (0) | 2025.05.23 |