본문 바로가기
프로그래밍/Python

파이썬(Python) typing 모듈을 이용한 annotation 세부 설정하기

by 부자 꽁냥이 2023. 2. 21.

파이썬(Python) 클린 코드를 작성할 때 annotation을 많이 쓴다. annotation은 변수 타입, 함수의 입출력값에 대한 타입을 표현하는 방식을 말한다. 이때 typing 모듈을 이용하면 타입을 좀 더 정교하게 표현할 수 있다. 이번 포스팅에서는 typing 모듈을 이용하여 타입 annotation 방법을 알아보고자 한다.

 

annotation에 대한 개념은 아래 포스팅을 참고하기 바란다.

 

[클린 코드] 2. docstring과 annotation을 이용한 코드 문서화


   typing 모듈을 이용한 정교한 타입 설정

여기서는 자주 사용하는 타입에 대해서 설명한다.


1) 파이썬의 기본 객체: Set, Tuple, List, Dict

typing은 파이썬 내장 모듈이므로 설치할 필요 없이 바로 임포트할 수 있다. 여기서는 파이썬 기본 객체인 Set, Tuple, List, Dict 타입을 설정해 보자.

 

아래 코드는 Set, List, Tuple, Dict 타입으로 설정하여 변수를 선언한다. 

 

from typing import Set, List, Tuple, Dict

set_var : Set
list_var : List = [1,2,3,4]
tuple_var : Tuple
dict_var : Dict = {'A':'B'}

 

하지만 위와 같은 경우는 typing을 안 써도 아래와 같이 기본 객체를 이용하여 타입 설정을 할 수 있다.

 

set_var : set
list_var : list = [1,2,3,4]
tuple_var : tuple
dict_var : dict = {'A':'B'}

 

그렇다면 굳이 typing을 쓰는 이유는 무엇일까? 바로 디테일한 타입 설정을 할 수 있기 때문이다. 디테일하다는 것은 리스트로 예를 들면 원소에 대한 타입까지 지정할 수 있다는 것이다. 

 

set_var : Set[str] = {'A', 'B'} ## 모든 원소가 str인 셋
list_var : List[int] = [1,2,3,4] ## 모든 원소가 int인 리스트
tuple_var : Tuple[int, str, float] = [3, 'Hi', 3.14] ## 원소의 타입을 혼합할 수 있다.
dict_var : Dict[str, str] = {'A':'Apple'} ## 키와 밸류가 str인 딕셔너리

 


2) 함수의 디폴트 값 : Optional

Optional은 None을 포함하는 인자 타입을 지정할 때 유용하게 쓰일 수 있다. 

 

from typing import Optional

def sum_two_number(a : int, b : Optional[int] = None) -> int:
    if b is not None:
        return a+b
    else:
        return a

3) 불변의 상수 : Final

Final은 재할당이 불가능한 상수에 대해서 타입을 지정하고자 할 때 유용하다. Final은 파이썬 3.8 이상에서 지원된다.

 

from typing import Final

CONSTANT : Final[float] = 3.14

4) 여러 타입 허용 : Union

Union은 여러 타입을 지정하고 싶을 때 사용한다.

 

from typing import Union

## 입출력값 모두 int 또는 float 타입이 될 수 있다.
def increase(a : Union[int, float]) -> Union[int, float]:
    return a+1

5) 순회가능한 모든 객체의 어머니 : Iterable

모든 순회가능한 객체를 이들의 추상화(상위) 타입으로 지정하고 싶을 때 Iterable을 쓰면 된다.

 

from typing import Iterable

def sum_iterable(data : Iterable[int]) -> int:
    return sum(data)

댓글


맨 위로