본문 바로가기
Computer Science/Programming

[Test] mypy로 python 타입 검사하기

by 카프리썬 2022. 3. 24.
728x90

 

동적 타이핑 언어

파이썬은 동적 (dynamic) 타이핑 언어이다.

즉, 문자열인지 정수인지 실수인지 코드의 타입을 지정해줄 필요가 없다는 것이다.

 

개발자로써 코드를 짤때 타입을 생략해도 되니까 간단하고 편하다라고 느낄 수 있지만,

반대로 유지보수를 할때 해당 변수에 뭐가 들어가있는지 예상이 불가능해서 더 불편하다고 느낄수도 있다. 

 

결국엔 타입을 생략하는 동적타이핑 언어라고 해도 명확하게 타입을 지정하는 편이 더 낫다.

 

이렇게 타입을 지정하고, 생략하고는 개인의 차이가 있을수 있기 때문에 이런 스타일을 통일하는게 좋다.

그래서 파이썬 코드에 파입을 명시하기 위한 표준을 위해 파이썬 3.5 이상부터는 타입어노테이션이 추가되었다.

이 표준에 따라 변수나 함수에 타입이 명시된 파이썬 코드는 정적 타입검사기로 타입에러를 찾아낼 수 있다.

 

타입검사 

파이썬은 동적프로그래밍 언어이다.

즉, 타입어노테이션이 언어레벨에서 코드실행에 아무런 영향이나 제약을 주지 않는다. 

 

아래와 같이 타입이 틀렸음에도 불구하고 인터프리터 자체에서 에러라고 체크해주지 않는다는것이다.

예를 들어 위와 같은 코드에서 test1함수에 보면 x의 매개변수의 타입이 int인데 str로 잘못표시되어 있다.

또한, test2함수에서는 리턴하는 타입이 str인데 list로 잘못표시되어 있다.

하지만 이 스크립트를 실행하면 아무런 문제없이 실행이 된다. 동적프로그래밍 언어이기 때문이다. 

 

그래서 이런걸 체크해주기 위해서 타입검사 도구가 필요하다. 

 

정적타입검사 : Mypy 

mypy는 정적타입검사 도구이다.

  • 설치 : pip install mypy
  • 실행 : mypy 파일명.py

code formatter였던 black을 실행하는 방식과 유사하다. 

 

위의 예시 코드를 정적타입 도구로 돌려보면 이렇다.

위에서 예상했던대로 test1함수의 인자로 들어간 타입과 test2의 리턴타입이 못되엇다고 알려준다.

그래서 mypy를 사용해서 이런 타입오류를 실행전에 찾아낼수 있다!!

결론은 동적타이핑 파이썬을 유지보수하거나 짜면서 타입을 간과하고 있었다.

그래서 이렇게 타입을 체크해주는 툴을 사용하면 조금더 꼼꼼한 코드리팩토링을 진행할수 있을것 같다

 

 

참고

https://www.daleseo.com/python-mypy/

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });