C
Python/타입/Lesson 20

타입 힌트 기초

1시간·theory
Python

타입 힌트 기초

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ typing.Optional · Union · Literal · TypedDict 사용
  • ✅ mypy --strict 통과시키는 패턴
  • ✅ Generic + TypeVar 로 재사용 가능 타입

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

타입 힌트 — 코드 + 실행 결과

x: int = 변수·함수에 타입 표기. Python 3.5+ (PEP 484). 런타임 영향 X, IDE·mypy 가 활용.


1. 함수에 타입

python
# ❌ 타입 없음 — 무엇을 받고 무엇을 반환?
def 더하기(a, b):
    return a + b

# ✅ 타입 명시
def 더하기(a: int, b: int) -> int:
    return a + b

print(더하기(3, 5))    # 8
# 더하기("a", "b")     # mypy 가 잡아줌, 그러나 *런타임에서는 동작*

⚠️ Python 은 타입 힌트를 강제 X. 단순 표기. mypy·pyright 가 정적 검사.


2. 자주 쓰는 타입

python
나이: int = 28
키: float = 175.5
이름: str = "홍길동"
학생: bool = True
점수들: list[int] = [85, 92, 78]            # 3.9+
사람: dict[str, int] = {"이름": 1}          # 3.9+
좌표: tuple[float, float] = (37.5, 127.0)
집합: set[str] = {"a", "b"}

3. Optional·Union (None 가능)

python
def 찾기(이름: str) -> str | None:           # 3.10+ — | 사용
    return 데이터.get(이름)

# 3.9 이하는
from typing import Optional
def 찾기(이름: str) -> Optional[str]:
    return 데이터.get(이름)

# Union — 여러 타입 가능
def 처리(x: int | str) -> str:               # 3.10+
    return str(x)

4. Callable·복잡 타입

python
from typing import Callable

# 함수를 받는 함수
def 적용(f: Callable[[int], int], x: int) -> int:
    return f(x)

결과 = 적용(lambda n: n * 2, 5)               # 10

5. 클래스 + 타입

python
from dataclasses import dataclass

@dataclass
class 사람:
    이름: str
    나이: int
    친구들: list["사람"] = None              # forward reference

def 인사(p: 사람) -> str:
    return f"안녕 {p.이름}"

6. 타입 검사 — mypy

bash
$ pip install mypy
$ mypy 내_파일.py
# error: Argument 1 to "더하기" has incompatible type "str"; expected "int"

한 줄 요약

def f(x: T) -> R: + list[int] + str | None 3개면 90% 커버.

💻 타입 힌트 기본
# 변수 타입 힌트
name: str = "철수"
age: int = 25
height: float = 175.5
is_student: bool = True

# 함수 타입 힌트
def greet(name: str) -> str:
    return f"안녕하세요, {name}님!"

def add(a: int, b: int) -> int:
    return a + b

# 반환값 없음
def print_hello() -> None:
    print("Hello")

# 리스트, 딕셔너리 (Python 3.9+)
def process_items(items: list[str]) -> dict[str, int]:
    return {item: len(item) for item in items}

# Python 3.8 이하
from typing import List, Dict
def process_items_old(items: List[str]) -> Dict[str, int]:
    return {item: len(item) for item in items}

# 클래스 메서드
class Person:
    def __init__(self, name: str, age: int) -> None:
        self.name = name
        self.age = age
    
    def greet(self) -> str:
        return f"안녕, {self.name}"

💡 핵심 포인트

1. 타입 힌트는 힌트일 뿐, 강제 아님
2. Python 3.9+: list[str], dict[str, int]
3. Python 3.8-: from typing import List, Dict

Python은 간결하고 읽기 쉬운 문법으로 다양한 분야에 활용됩니다. 인터프리터 언어로 REPL 환경에서 즉시 실행 가능합니다. PEP 8 코딩 스타일 가이드를 따르고, Black/autopep8으로 자동 포맷팅합니다. 타입 힌트(type hints)로 코드 가독성과 IDE 지원을 향상시킵니다. pip로 패키지 관리, venv/conda로 가상환경을 구성합니다.

🐍 실행해보기 — 타입 힌트 기초

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 함수 시그니처에 typing.Optional · Literal · TypedDict 사용해 정밀하게 타입 붙여줘"
  • "이 코드에 mypy --strict 통과하도록 타입 보강해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

타입 힌팅 - Python