파이썬 타입 힌트

박정기·2022년 11월 23일
2

파이썬 타입 힌트?

파이썬 알고리즘 인터뷰 책을 읽다가 파이썬 타입 힌트에 대해서 알게 됐다.

최근에 파이썬으로 코딩테스트를 봤는데, 그 때 사용자 정의 함수를 만들 때 입력 변수의 타입과 출력 변수의 타입을 헷갈린 적이 있었다.

이부분을 해결하기 위해서 파이썬의 타입 힌트 기능을 쓰면 좋을 것 같아서 공부한 겸 정리해 보려고 한다.

타입 힌트

파이썬은 대표적인 동적 타이핑 언어임에도 타입을 지정할 수 있는 타입 힌트가 PEP 484 문서에 추가됐다.
다음과 같이 타입을 선언할 수 있다.

a: str = "1"
b : int = 1

기존에는 사용자 정의 함수에서 타입 힌트를 사용하지 않아서 다음과 같이 썼는데

def fn(a):
...

fn( ) 함수의 파라미터 a에는 어떠한 타입의 값을 넘겨야 하는지 전혀 알 수 없으며 함수의 리턴 값 또한 알 수 없다.
나중에 프로젝트 규모가 커지면 가독성을 떨어뜨리게 되며 버그 유발의 주범이 된다. 따라서 다음과 같이 타입 힌트를 선언해보자.

def fn(a: int) -> bool:
...

이처럼 타입 힌트를 사용하게 되면 fn( ) 함수의 파라미터 a가 정수형임을 분명하게 알 수 있고, 리턴 값으로 True or False를 반환 하는 것 또한 확실하게 알 수 있다.
이와 같이 명시적으로 선언하게 되면 버그를 줄일 수 있고, 가독성 또한 좋아진다.

mypy

온라인 코딩 테스트 시 mypy를 사용하면 타입 힌트에 오류가 있는지 자동으로 확인 할 수 있다.

$pip install mypy

다음과 같이 mypy를 설치할 수 있다.

타입 힌트가 잘못 지정된 코드는 incompatible return value type 오류가 발생하므로 확인 후 직접 코드를 수정해 나갈 수 있다.

mypy 예제

fn ( ) 함수의 예제를 구현해 보았다.

def fn(a:int, b:str)->str:
	if str(a) == b:
		return True
	else:
		return False

result = fn(1, '1')
print(result)

다음과 같이 현재 return 값이 boolean타입인데, 위에 타입 힌트에서 리턴 타입을 str로 설정해버리면 의도한 대로 진행되지 않는다. 따라서

python3 -m mypy test.py

를 실행하게 되면

test.py:3: error: Incompatible return value type (got "bool", expected "str")  [return-value]
test.py:5: error: Incompatible return value type (got "bool", expected "str")  [return-value]

와 같은 에러를 만나게 되고, str를 예상했지만 bool 타입을 return 받았다는 에러가 뜨게 된다.

따라서 다음과 같이 fn ( ) 함수를 고치면

def fn(a:int, b:str)->bool:
	if str(a) == b:
		return True
	else:
		return False

result = fn(1, '1')
print(result)

Success: no issues found in 1 source file

라는 말과 함께 검사를 종료하게 된다.

2개의 댓글

comment-user-thumbnail
2022년 11월 27일

파이썬에도 이런 기능이 있었군요. 덕분에 배웠습니다!

답글 달기
comment-user-thumbnail
2022년 11월 27일

마치 타입스크립트 처럼 타입을 선언해주는 건가보군요 파이썬도 이런 기능이 있는지 처음 알았네요ㅎㅎ

답글 달기