2023-05-24 19:17:00

파이썬에서 타입 힌트(타입 어노테이션)를 하려다 보면 꼭 알아야 할 모듈이 있습니다. 바로 typing 모듈입니다. 물론 파이썬 3.10 이상부터는 typing 모듈이 없어도 타입 힌트를 주는데 별 어려움이 없어지긴 했지만, 예전 버전으로 작성된 코드를 이해하기 위해서는, 또 예전 버전의 파이썬에서 타입 힌트를 주기 위해서는 typing 모듈을 꼭 알고 넘어가야 합니다. 

 

List, Dict, Tuple, Set

우선 typing 모듈의 중요한 클래스들에는 List, Dict, Tuple, Set, Optional, Union, Final 등이 있습니다. List, Dict, Tuple, Set은 말 그래도 파이썬의 list, dict, tuple, set을 나타내는 친구들입니다. 

 

from typing import List, Dict, Tuple, Set

scores: List[int] = [95, 89, 72, 87]

people: Dict[str, int] = {"홍길동": 31, "변사또": 28, "장영실": 19}

fruits: Tuple[str, int] = ("apple", 7)

capital: Set[str] = {"Seoul", "Beijing", "Tokyo"}

 

Union, Optional

typing 모듈 중에서는 Union과 Optional을 특히 잘 알아야 합니다.

 

Union은 여러 개의 타입을 허용하고자 할 때 사용가능합니다.

 

from typing import Union


def print_age(age: Union[int, str]):
    print("저는 " + str(age) + "살입니다.")


print_age(17)
print_age("열일곱")

 

 

Optional은 지정한 자료형 외에도 None이 허용될 때 유용하게 쓸 수 있습니다. 사실상 Union[int, None]과 Optional[int]는 같은 의미가 됩니다.  

 

from typing import Optional


def introduce(name: str, age: Optional[int] = None):
    print("제 이름은 " + name + "입니다.")
    if age:
        print("제 나이는 " + str(age) + "살입니다.")
    else:
        print("제 나이는 비밀입니다.")
    print("-" * 20)


introduce("이순신", 36)
introduce("을지문덕")

 

 

Final

그리고 어떤 변수를 상수처럼 여기고 싶을 때는 Final을 사용할 수 있습니다. 

 

from typing import Final


PI: Final[float] = 3.14

PI = 3.15

print(PI)

 

파이썬의 타입 힌트는 절대 타입을 강제하는 것은 아니기 때문에 상수로 타입 힌트를 준 PI에 다른 값으로 재할당하는 것이 가능하긴 합니다. 하지만 Final로 타입 힌트를 주면 IDE에서 보시는 것처럼 상수(constant)니 재할당하지 말라고 알려줍니다. 

 

 

관련 글

- [python] Pydantic 이해하기 (data class보다 더 나은 듯?)

 

참고자료

[1] https://www.daleseo.com/python-typing/