언어 Language/파이썬 Python

Q. 파이썬Python에서 타입 힌트Type hints를 적으면 타입이 변경될까?

Tap to restart 2023. 1. 24. 08:00

A. 아니다. 변경되지 않는다.

 

아래처럼 text란 변수의 type을 int로 선언했다. 값은 "hello!"를 저장하고, type을 찍어보면 어떻게 될까?

text: int = "hello!"
print(type(text))

type hint 예

입력값인 "hello!"의 타입인 str이 된다. int가 아니다. 에러도 발생하지 않는다.

 

너무 단순한 예라 그런 거고 다른 경우는 다를 거 같다고 생각할 수 있다.

DRF(Django Rest Framework)에서 아래처럼 테스트를 해보자. request를 엉뚱하게 str이라고 선언한다. 그리고 type을 확인한다. 역시나 원래 타입인 rest_framework.request.Request로 나오는 것을 확인할 수 있다.

타입 힌트는 말 그대로 힌트다. 정적 타입 언어인 다른 언어들처럼 타입이 틀렸다고 에러가 발생하지 않는다.

 

타입 힌트 설명 찾아보기

파이썬 타입 힌트 설명을 살펴보자. 파이썬 3.5부터 도입된 파이썬 타입힌트에 대한 설명이다.

Note: The Python runtime does not enforce function and variable type annotations. They can be used by third party tools such as type checkers, IDEs, linters, etc.
참고: 파이썬 런타임은 함수와 변수형 어노테이션을 강제하지 않습니다. 형 어노테이션은 형 검사기, IDE, 린터(linter) 등과 같은 제삼자 도구에서 사용할 수 있습니다.
출처: Support for type hints

"파이썬 런타임은 타입에 대한 어노테이션을 강제하지 않는다."는 말은 타입을 안 써도 된다는 뜻이다. 타입을 반드시 명시해야 하고 변경도 안 되는 C 같은 강타입 언어가 아니라 파이썬은 원래 무타입 언어니까.

 

Non-goals
...
It should also be emphasized that Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention.
출처: PEP484

"파이썬은 동적 타입 언어로 남을 것이며, 저자들은 관습으로라도 타입 힌트를 필수로 만들 생각이 없다는 점도 강조되어야 한다."

 

파이썬은 동적 타입 언어다. 타입이 그때 그때 바뀐다. 타입 힌트를 도입한 사람들도 파이썬은 동적 타입 언어로 남을 것이란 점을 강조했다. 그래서 힌트라고 명시했다고 볼 수 있다. 그러니 타입 힌트를 쓴다고 힌트에 적어놓은 타입대로 타입이 변경될 거란 걱정은 할 필요가 없다. 

 

참고

Q. 파이썬으로 개발할 때 타입 힌트type hints를 쓰면 좋은 점은?

Python Types Intro, tiangolo