디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

파이썬은 동적타입이라 타입추론 없나앱에서 작성

발명도둑잡기갤로그로 이동합니다. 2025.08.26 20:49:52
조회 77 추천 0 댓글 2

챗지피티
좋은 질문이에요

보통 우리가 **“타입 추론(type inference)”**이라고 부르는 건 정적 타입 언어에서 컴파일러가 타입을 자동 계산하는 과정을 가리킵니다.
파이썬은 동적 타입 언어라서 런타임에 객체가 타입을 가진다는 점에서 “정적 타입 추론”은 하지 않습니다.

하지만 몇 가지 층위로 나눠서 볼 수 있어요:

1. 런타임 관점

파이썬 변수는 타입이 없고, 변수에 들어가는 객체만 타입을 가집니다.

x = 10 # 지금은 int x = "hello" # 지금은 str

런타임 시점에서 x.__class__로 언제든 타입을 알 수 있어요.

따라서 정적 타입 추론은 불가능하지만, 런타임에서는 항상 “값 기반 타입 확인”이 가능.

2. 정적 분석 관점 (Mypy, Pyright 같은 타입 체커)

PEP 484 이후 파이썬에는 typing 모듈 기반의 정적 타입힌트가 추가됨.

타입힌트를 생략해도, 타입 체커는 제약 기반 추론을 일부 해 줍니다.

def add(x, y): return x + y a = add(1, 2) # 정적 분석 도구는 a를 int로 추론 b = add("a", "b") # str로 추론

하지만 Haskell/ML처럼 “완전한 타입 추론”은 아님.
→ 주로 지역 변수 타입 유추 + 함수 호출 인자 기반 유추 정도만.

3. IDE/도구의 타입 추론

PyCharm, VSCode(Pyright/Pylance) 같은 IDE는

변수 대입, 함수 반환값, 클래스 상속 관계를 따라가며 타입 추론을 해 줍니다.

이건 언어 차원에서 제공되는 게 아니라 툴링 수준의 추론이에요.

4. 정리

순수 파이썬 언어 자체: 동적 타이핑 → 정적 타입 추론 없음.

타입힌트 + Mypy/Pyright: 제한된 정적 타입 추론 가능.

IDE: 보조적으로 타입 추론 제공.

한마디로, 파이썬은 정적 타입 추론 언어는 아니지만,
“타입힌트 기반 + 도구 지원”으로 제한된 타입 추론을 흉내내는 환경을 제공합니다.

혹시 원하시면 제가 같은 함수를 Haskell처럼 “완전 추론”되는 경우랑, 파이썬에서 Mypy가 “부분 추론”하는 경우를 비교해서 보여드릴까요?

좋습니다. 이제 Mypy를 중심으로 “파이썬에서 타입추론이 어떻게 되는지” 정리해 드릴게요.

Mypy란?

파이썬용 정적 타입 체커(static type checker).

PEP 484 (typing 모듈)로 정의된 **타입 힌트(type hints)**를 읽어서 코드에 타입오류가 없는지 검사.

런타임에 동작하는 게 아니라 → 개발 시점에만 돌려서 에러를 알려줌.

공식 홈페이지: mypy-lang.org

Mypy의 타입 추론 범위

Mypy는 Haskell/OCaml 같은 “완전한 타입 추론”은 못 하지만, 로컬 변수나 함수 반환값에 대해서는 충분히 추론해줍니다.

✅ 변수 추론

x = 10 # Mypy는 int로 추론 y = "hello" # Mypy는 str로 추론

✅ 함수 반환 타입 추론

def add(a: int, b: int): return a + b z = add(3, 4) # z는 int로 추론

타입 어노테이션을 생략한 변수/지역 변수는 꽤 잘 추론합니다.

타입힌트 없이 제한되는 경우

Mypy는 함수의 파라미터/반환 타입은 주석 없으면 Any로 처리하는 경우가 많아요.

def add(x, y): # x, y: Any로 추론됨 return x + y add(1, 2) # 정상 add("a", 1) # 여기서도 통과(Any이므로)

➡+ 함수 시그니처에 타입을 적어 주어야 잘못된 호출을 잡아냅니다.

제네릭 추론 예시

Mypy는 제네릭 함수의 타입 변수도 추론할 수 있습니다.

from typing import TypeVar T = TypeVar("T") def identity(x: T) -> T: return x a = identity(42) # a: int로 추론 b = identity("hi") # b: str로 추론

에러 예시

def greet(name: str) -> str: return "Hello, " + name greet("World") # OK greet(123) # ❌ Mypy 에러: "int"는 "str"에 들어갈 수 없음

실행은 되지만, Mypy가 개발 단계에서 미리 알려줌.

Mypy 한계

동적 기능(리플렉션, 메타프로그래밍, getattr, __dict__) → 추론 어려움 → Any로 떨어짐.

런타임 다형성은 따라가기 힘듦 → 개발자가 타입 주석 필요.

완전한 HM 타입 추론(X) → 함수 인자/반환은 어노테이션 꼭 붙여줘야 안전.

실무 팁

공용 API 함수에는 반드시 타입 어노테이션 작성 → Mypy가 잘 잡아줌.

내부 구현/지역 변수는 어노테이션 생략해도 Mypy가 추론해줌.

--strict 옵션을 쓰면 더 강력한 검사(implicit Any 금지 등).

IDE(PyCharm, VSCode + Pylance)는 Mypy 기반 타입 추론으로 보조.

정리:
파이썬 자체엔 타입 추론이 없지만, Mypy는 “힌트를 바탕으로 부분적 추론”을 해주고, 잘못된 타입 사용을 미리 찾아주는 정적 분석기입니다.

원하시면 제가 mypy 실제 실행 예제(코드 + 실행 결과 메시지)를 보여드릴까요?


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 존재만으로도 웃음주는 최고의 '웃수저' 스타는? 운영자 25/08/25 - -
이슈 느린 여행으로 삶의 속도를 찾는 유튜버 꾸준 운영자 25/08/26 - -
AD MD's pick 상반기 인기 노트북 운영자 25/08/26 - -
공지 프로그래밍 갤러리 이용 안내 [90] 운영자 20.09.28 46687 65
2885107 비뇨기과가는길... 넥도리아(223.38) 10:30 2 0
2885106 UX는 어떻게 설정해야 유저의 이목이 뜰까 ㅆㅇㅆ(124.216) 10:29 2 0
2885105 몸살 한번 걸리고나니, 너무 건강하고 싶은데 어떻게 하면 되냐?? [2] ㅇㅇ(223.38) 10:24 6 0
2885104 저희집 옥상방수공사 하고 있으세요. 넥도리아(222.233) 10:22 3 0
2885103 그건 말할 수 없다냥! ♥냥덩이♥갤로그로 이동합니다. 10:07 11 0
2885102 죄명이 한국에서처럼 거짓말치면 통할줄 알았나봄 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 09:57 13 0
2885101 찢재명 덮기 위해 눈돌리기용 ♥냥덩이♥갤로그로 이동합니다. 09:55 8 0
2885100 러스트는 설계 결함 및 버그를 숨기기 위해 가스라이팅을 합니다. 나르시갤로그로 이동합니다. 09:49 8 0
2885099 공장이 화이트칼라상위 직장이될날이 머지않았군 네오커헠(121.157) 09:48 16 0
2885097 러스트의 심각한 결점 / 버그 나르시갤로그로 이동합니다. 09:46 12 0
2885096 나도 러스트 접기로 했다 나르시갤로그로 이동합니다. 09:44 12 0
2885095 나님 등장 프갤러(49.174) 09:43 9 0
2885094 나도 .. 하기로 했다..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09:27 11 0
2885093 그냥월급쟁이계속할라면 FA윈폼질이 제일인듯 네오커헠(121.157) 09:27 32 0
2885092 c# 을 써야한다 [3] ㅇㅇ(211.193) 09:21 23 0
2885091 나도 러스트 접기로했다 [2] 헬마스터갤로그로 이동합니다. 09:13 28 0
2885090 애플 이벤트 D - 13 헤르 미온느갤로그로 이동합니다. 09:12 12 0
2885088 태연 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 09:03 15 0
2885087 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 09:00 13 0
2885086 나 대기업 프리 4년차인데. [1] 찍먹갤로그로 이동합니다. 08:40 32 0
2885085 프갤러들 중에서 키 180 넘는 [10] 루도그담당(58.239) 08:32 47 0
2885084 러스트 지금 생각해보면 게거품인거 같음 프갤러(223.57) 07:59 26 0
2885071 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 05:57 18 0
2885056 개발 블로그 같은거 쓰는거 생각해보니 좀 대단한데 프갤러(106.241) 03:59 46 0
2885055 헌혈 하면 안되는 이유.jpg [5] 야옹아저씨갤로그로 이동합니다. 03:45 59 5
2885047 카톡 10대 인기 이모티콘이 임신했어요인 이유 [1] 발명도둑잡기갤로그로 이동합니다. 01:37 52 0
2885037 12시 이후엔 위워크에 사람이 없어서 [1] 꼬치의달인갤로그로 이동합니다. 00:47 56 0
2885036 괴변 후유증이 아물질않아요. gy갤로그로 이동합니다. 00:46 45 0
2885032 몸살 한번 걸리고나니, 너무 건강하고 싶은데 어떻게 하면 되냐?? ㅇㅇ(125.136) 00:04 33 0
2885031 머기업 서류 통과하고 과제 합격했음 [2] 꼬치의달인갤로그로 이동합니다. 08.27 96 0
2885030 나님 탈갤합니당☘+ [1] ♥냥덩이♥갤로그로 이동합니다. 08.27 50 0
2885029 커널 조작해서 [4] 루도그담당(58.239) 08.27 62 0
2885028 냥뎡이 너 오늘 뉴스에 나왔더라? [1] ㅇㅇ(223.38) 08.27 63 0
2885023 나님은 찐따야.. ♥냥덩이♥갤로그로 이동합니다. 08.27 38 0
2885022 러스트 60년 갈아넣으면 삼라만상을 깨우치고 신선이 될 수 있다. 프갤러(110.8) 08.27 40 0
2885017 멸공의칼날 결말.. [1] ♥냥덩이♥갤로그로 이동합니다. 08.27 50 0
2885015 술, 담배를 안하는게 생각보다 인생에 중요하다고 생각한다. [1] ㅇㅇ(221.155) 08.27 53 0
2885013 러스트 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 08.27 33 0
2885010 저장용 ♥냥덩이♥갤로그로 이동합니다. 08.27 27 0
2885008 백준 문제 어케하면 잘풀수있음? [2] ㅇㅇ(220.80) 08.27 59 0
2885003 Hex Editor만 가지고 바이너리 분석하는 방법 정리해봄 [11] Butter(1.235) 08.27 73 0
2884998 마귀의 농간이라고밖에 못할 악재가 산더미였어요. gy갤로그로 이동합니다. 08.27 17 0
2884997 아스카의 1억 모으기 프로젝트는 계속 진행됩니다 [2] 아스카영원히사랑해갤로그로 이동합니다. 08.27 44 0
2884990 폰노의만의 저주 [2] ㅇㅇ(125.179) 08.27 61 1
2884989 누가 나님 냥덩이 만진거야? ♥냥덩이♥갤로그로 이동합니다. 08.27 64 0
2884988 언어별 철학.txt [3] 프갤러(106.101) 08.27 106 1
2884986 13년의 악재만 아니면 파탄까진 안갔겠는데요. gy갤로그로 이동합니다. 08.27 22 0
2884985 바이브코딩한거 결국 유지보수가 안되는데 riir하고 싶다. 프갤러(27.163) 08.27 30 0
2884984 형들 C언어 배울려고 학원 가는거 에바인가요? [6] ㅇㅇ(211.235) 08.27 73 0
뉴스 윤민수 ‘이혼 후 동거’ 터진 뒤…아들 윤후, 엄마에게 한 말 디시트렌드 08.27
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2