프로그래밍 언어/Python
[python] Type Hints, python에 타입을 지정한다?
ssung.k
2021. 6. 20. 20:32
정적언어 VS 동적언어
Type Hints
에 대해서 알아보기 전에 우선 정적언어와 동적언어에 대한 이해가 필요합니다.
정적언어
- 컴파일 시 변수의 타입이 결정
- 변수 선언 시 자료형 지정
- C, Java 등의 언어가 해당
동적언어
- 런타임 시 변수의 타입이 결정
- 실행 도중 변수에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있음
- python, javascript 등의 언어가 해당
Type Hints란
python은 대표적인 동적언어입니다.
그렇기 때문에 변수를 선언할 때, 함수가 매개변수를 받을 때 모두 자료형을 지정하지 않습니다.
위에서 말한대로 런타임 시 결정되기 때문에 실행 도중에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있죠.
Type Hints
는 이를 방지하고자 타입을 표시하는 역할을 합니다.
하지만 이름 그대로 힌트일 뿐이지 타입을 강제화 하지는 않습니다.
Type Hints 사용법
Type Hints
를 어떻게 사용하는지 간단한 예제를 통해 알아봅시다.
python 3.5에서는 함수의 파라미터와 반환값에 대한 Type Hints
가 추가되었습니다.
def greeting(name: str) -> str:
return 'Hello ' + name
런타임 중, __annotation__
을 통해 확인이 가능합니다.
print(greeting.__annotations__)
# {'name': <class 'str'>, 'return': <class 'str'>}
python 3.6에서는 변수에 대한 Type Hints
가 추가되었습니다.
greeting_message: str = "hello minsung"
단순히 str과 int 외에 Dict, List, Tuple도 가능합니다.
from typing import Dict, List, Tuple
animal_cnts: Dict[str, int] = {
"dog": 2,
"cat": 1
}
heights: List[int] = [181, 163, 179, 172]
friends: Tuple[str, int, float] = ("minsung", 26, 180.9)
마무리
python 공식문서에 보면 아래와 같은 문구가 있습니다.
Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention.
해석하자면 파이썬은 계속 동적 언어로 남을거고, Type Hints
는 필수가 되지 않을거라는 말이죠.
하지만 Type Hints
는 유용하게 쓰일 곳이 많습니다.
Django의 경우, swagger로 API 문서를 자동화할 때도 요긴하게 쓰이고, 코드의 질을 높이기 위한 좋은 방법이 될 수 있습니다.