프로그래밍 언어/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 문서를 자동화할 때도 요긴하게 쓰이고, 코드의 질을 높이기 위한 좋은 방법이 될 수 있습니다.