--- /dev/null
+# νμ΄μ¬ νμ
μκ°
+
+νμ΄μ¬μ μ νμ μΌλ‘ "νμ
ννΈ(type hints)"λ₯Ό μ§μν©λλ€.
+
+μ΄λ¬ν **νμ
ννΈ**λ€μ λ³μμ <abbr title="μλ₯Ό λ€λ©΄: str, int, float, bool">νμ
</abbr>μ μ μΈν μ μκ² ν΄μ£Όλ νΉμν ꡬ문μ
λλ€.
+
+λ³μμ νμ
μ μ§μ νλ©΄ μλν°μ ν΄μ΄ λ λ§μ λμμ μ€ μ μκ² λ©λλ€.
+
+μ΄ λ¬Έμλ νμ΄μ¬ νμ
ννΈμ λν **λΉ λ₯Έ μμ΅μ / λ΄μ©νκΈ°** μμ€μ λ¬Έμμ
λλ€. μ¬κΈ°μλ **FastAPI**λ₯Ό μ°κΈ° μν μ΅μνμ λ΄μ©λ§μ λ€λ£Ήλλ€.
+
+**FastAPI**λ νμ
ννΈμ κΈ°λ°μ λκ³ μμΌλ©°, μ΄λ λ§μ μ₯μ κ³Ό μ΄μ΅μ΄ μμ΅λλ€.
+
+λΉλ‘ **FastAPI**λ₯Ό μ°μ§ μλλ€κ³ νλλΌλ, μ‘°κΈμ΄λΌλ μμλλ©΄ λμμ΄ λ κ²μ
λλ€.
+
+!!! note "μ°Έκ³ "
+ νμ΄μ¬μ λ₯μνμ
μ νμ
ννΈμ λν΄ λͺ¨λ μμ λ€λ©΄, λ€μ μ±ν°λ‘ 건λλ°μΈμ.
+
+## λκΈ° λΆμ¬
+
+κ°λ¨ν μμ λΆν° μμν΄λ΄
μλ€:
+
+```Python
+{!../../../docs_src/python_types/tutorial001.py!}
+```
+
+μ΄ νλ‘κ·Έλ¨μ μ€νν κ²°κ³Όκ°:
+
+```
+John Doe
+```
+
+ν¨μλ μλμ κ°μ΄ μ€νλ©λλ€:
+
+* `first_name`κ³Ό `last_name`λ₯Ό λ°μ΅λλ€.
+* `title()`λ‘ κ° μ²« λ¬Έμλ₯Ό λλ¬Έμλ‘ λ³νμν΅λλ€.
+* λ λ¨μ΄λ₯Ό μ€κ°μ 곡백μ λκ³ <abbr title="λ κ°λ₯Ό νλλ‘ μ°¨λ‘μ°¨λ‘ μ΄μ΄μ§κ² νλ€">μ°κ²°</abbr>ν©λλ€.
+
+```Python hl_lines="2"
+{!../../../docs_src/python_types/tutorial001.py!}
+```
+
+### μ½λ μμ
+
+μ΄κ±΄ λ§€μ° κ°λ¨ν νλ‘κ·Έλ¨μ
λλ€.
+
+κ·Έλ°λ° μ²μλΆν° μμ±νλ€κ³ μκ°μ ν΄λ΄
μλ€.
+
+μ¬λ¬λΆμ λ§€κ°λ³μλ₯Ό μ€λΉνκ³ , ν¨μλ₯Ό μ μνκΈ° μμνμ κ²λλ€.
+
+μ΄λ "첫 κΈμλ₯Ό λλ¬Έμλ‘ λ°κΎΈλ ν¨μ"λ₯Ό νΈμΆν΄μΌ ν©λλ€.
+
+`upper`μλ? μλλ©΄ `uppercase`? `first_uppercase`? `capitalize`?
+
+κ·Έλ κ°λ°μλ€μ μ€λ μΉκ΅¬, μλν° μλμμ±μ μλν΄λ΄
λλ€.
+
+λΉμ μ `first_name`λ₯Ό μ
λ ₯ν λ€ μ (`.`)μ μ
λ ₯νκ³ μλμμ±μ μΌκΈ° μν΄μ `Ctrl+Space`λ₯Ό λλ μ΅λλ€.
+
+νμ§λ§ μ¬νκ²λ μλ¬΄λ° λμμ΄ λμ§ μμ΅λλ€:
+
+<img src="/img/python-types/image01.png">
+
+### νμ
μΆκ°νκΈ°
+
+μ΄μ λ²μ μμ ν μ€λ§ μμ ν΄λ΄
μλ€.
+
+μ ν¬λ μ΄ ν¨μμ λ§€κ°λ³μ λΆλΆ:
+
+```Python
+ first_name, last_name
+```
+
+μ μλμ κ°μ΄ λ°κΏ κ²λλ€:
+
+```Python
+ first_name: str, last_name: str
+```
+
+μ΄κ² λ€μ
λλ€.
+
+μ΄κ² "νμ
ννΈ"μ
λλ€:
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial002.py!}
+```
+
+νμ
ννΈλ λ€μκ³Ό κ°μ΄ κΈ°λ³Έ κ°μ μ μΈνλ κ²κ³Όλ λ€λ¦
λλ€:
+
+```Python
+ first_name="john", last_name="doe"
+```
+
+μ΄λ λ€λ₯Έ κ²μ
λλ€.
+
+λ±νΈ(`=`) λμ μ½λ‘ (`:`)μ μ°κ³ μμ΅λλ€.
+
+μΌλ°μ μΌλ‘ νμ
ννΈλ₯Ό μΆκ°νλ€κ³ ν΄μ νΉλ³νκ² μ΄λ€ μΌμ΄ μΌμ΄λμ§λ μμ΅λλ€.
+
+κ·Έλ μ§λ§ μ΄μ , λ€μ ν¨μλ₯Ό λ§λλ λμ€μ΄λΌκ³ μκ°ν΄λ΄
μλ€. λ€λ§ μ΄λ²μ νμ
ννΈκ° μμ΅λλ€.
+
+κ°μ μν©μμ `Ctrl+Space`λ‘ μλμμ±μ μλμν€λ©΄,
+
+<img src="/img/python-types/image02.png">
+
+μλμ κ°μ΄ "κ·Έλ μ§!"νλ μ΅μ
μ΄ λμ¬λκΉμ§ μ€ν¬λ‘€μ λ΄λ €μ λ³Ό μ μμ΅λλ€:
+
+<img src="/img/python-types/image03.png">
+
+## λ ν° λκΈ°λΆμ¬
+
+μλ ν¨μλ₯Ό 보면, μ΄λ―Έ νμ
ννΈκ° μ μ©λμ΄ μλ κ±Έ λ³Ό μ μμ΅λλ€:
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial003.py!}
+```
+
+νΈμ§κΈ°κ° λ³μμ νμ
μ μκ³ μκΈ° λλ¬Έμ, μλμμ± λΏ μλλΌ μλ¬λ νμΈν μ μμ΅λλ€:
+
+<img src="/img/python-types/image04.png">
+
+μ΄μ κ³ μ³μΌνλ κ±Έ μκΈ° λλ¬Έμ, `age`λ₯Ό `str(age)`κ³Ό κ°μ΄ λ¬Έμμ΄λ‘ λ°κΎΈκ² λ©λλ€:
+
+```Python hl_lines="2"
+{!../../../docs_src/python_types/tutorial004.py!}
+```
+
+## νμ
μ μΈ
+
+λ°©κΈ ν¨μμ λ§€κ°λ³μλ‘μ¨ νμ
ννΈλ₯Ό μ μΈνλ μ£Όμ μ₯μλ₯Ό 보μμ΅λλ€.
+
+μ΄ μμΉλ μ¬λ¬λΆμ΄ **FastAPI**μ ν¨κ» μ΄λ₯Ό μ¬μ©νλ μ£Όμ μ₯μμ
λλ€.
+
+### Simple νμ
+
+`str`λΏ μλλΌ λͺ¨λ νμ΄μ¬ νμ€ νμ
μ μ μΈν μ μμ΅λλ€.
+
+μλ₯Ό λ€λ©΄:
+
+* `int`
+* `float`
+* `bool`
+* `bytes`
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial005.py!}
+```
+
+### νμ
λ§€κ°λ³μλ₯Ό νμ©ν Generic(μ λ€λ¦) νμ
+
+`dict`, `list`, `set`, `tuple`κ³Ό κ°μ κ°μ μ μ₯ν μ μλ λ°μ΄ν° κ΅¬μ‘°κ° μκ³ , λ΄λΆμ κ°μ κ°μμ νμ
μ κ°μ§ μλ μμ΅λλ€.
+
+νμ
κ³Ό λ΄λΆ νμ
μ μ μΈνκΈ° μν΄μλ νμ΄μ¬ νμ€ λͺ¨λμΈ `typing`μ μ΄μ©ν΄μΌ ν©λλ€.
+
+ꡬ체μ μΌλ‘λ μλ νμ
ννΈλ₯Ό μ§μν©λλ€.
+
+#### `List`
+
+μλ₯Ό λ€λ©΄, `str`μ `list`μΈ λ³μλ₯Ό μ μν΄λ΄
μλ€.
+
+`typing`μμ `List`(λλ¬Έμ `L`)λ₯Ό import ν©λλ€.
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial006.py!}
+```
+
+μ½λ‘ (`:`) λ¬Έλ²μ μ΄μ©νμ¬ λ³μλ₯Ό μ μΈν©λλ€.
+
+νμ
μΌλ‘λ `List`λ₯Ό λ£μ΄μ€λλ€.
+
+μ΄λ λ°°μ΄μ λ΄λΆ νμ
μ ν¬ν¨νλ νμ
μ΄κΈ° λλ¬Έμ λκ΄νΈ μμ λ£μ΄μ€λλ€.
+
+```Python hl_lines="4"
+{!../../../docs_src/python_types/tutorial006.py!}
+```
+
+!!! tip "ν"
+ λκ΄νΈ μμ λ΄λΆ νμ
μ "νμ
λ§€κ°λ³μ(type paramters)"λΌκ³ ν©λλ€.
+
+ μ΄λ² μμ μμλ `str`μ΄ `List`μ λ€μ΄κ° νμ
λ§€κ°λ³μ μ
λλ€.
+
+μ΄λ "`items`μ `list`μΈλ°, λ°°μ΄μ λ€μ΄μλ μμ΄ν
κ°κ°μ `str`μ΄λ€"λΌλ λ»μ
λλ€.
+
+μ΄λ κ² ν¨μΌλ‘μ¨, μλν°λ λ°°μ΄μ λ€μ΄μλ μμ΄ν
μ μ²λ¦¬ν λλ λμμ μ€ μ μκ² λ©λλ€:
+
+<img src="/img/python-types/image05.png">
+
+νμ
μ΄ μμΌλ©΄ μ΄κ±΄ κ±°μ λΆκ°λ₯μ΄λ λ€λ¦ μμ΅λλ€.
+
+λ³μ `item`μ `items`μ κ°λ³ μμλΌλ μ¬μ€μ μμλμΈμ.
+
+κ·Έλ¦¬κ³ μλν°λ κ³μ `str`λΌλ μ¬μ€μ μκ³ λμμ€λλ€.
+
+#### `Tuple`κ³Ό `Set`
+
+`tuple`κ³Ό `set`λ λμΌνκ² μ μΈν μ μμ΅λλ€.
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial007.py!}
+```
+
+μ΄ λ»μ μλμ κ°μ΅λλ€:
+
+* λ³μ `items_t`λ, μ°¨λ‘λλ‘ `int`, `int`, `str`μΈ `tuple`μ΄λ€.
+* λ³μ `items_s`λ, κ° μμ΄ν
μ΄ `bytes`μΈ `set`μ΄λ€.
+
+#### `Dict`
+
+`dict`λ₯Ό μ μΈνλ €λ©΄ μ»΄λ§λ‘ ꡬλΆλ 2κ°μ νλΌλ―Έν°κ° νμν©λλ€.
+
+첫 λ²μ§Έ λ§€κ°λ³μλ `dict`μ ν€(key)μ΄κ³ ,
+
+λ λ²μ§Έ λ§€κ°λ³μλ `dict`μ κ°(value)μ
λλ€.
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial008.py!}
+```
+
+μ΄ λ»μ μλμ κ°μ΅λλ€:
+
+* λ³μ `prices`λ `dict`μ΄λ€:
+ * `dict`μ ν€(key)λ `str`νμ
μ΄λ€. (κ° μμ΄ν
μ μ΄λ¦(name))
+ * `dict`μ κ°(value)λ `float`νμ
μ΄λ€. (κ° μμ΄ν
μ κ°κ²©(price))
+
+#### `Optional`
+
+`str`κ³Ό κ°μ΄ νμ
μ μ μΈν λ `Optional`μ μΈ μλ μλλ°, "μ νμ (Optional)"μ΄κΈ°λλ¬Έμ `None`λ λ μ μμ΅λλ€:
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial009.py!}
+```
+
+`Optional[str]`μ `str` λμ μ°κ² λλ©΄, νΉμ κ°μ΄ μ€μ λ‘λ `None`μ΄ λ μλ μλλ° νμ `str`μ΄λΌκ³ κ°μ νλ μν©μμ μλν°κ° μλ¬λ₯Ό μ°Ύκ² λμμ€ μ μμ΅λλ€.
+
+#### Generic(μ λ€λ¦) νμ
+
+μ΄ νμ
μ λκ΄νΈ μμ λ§€κ°λ³μλ₯Ό κ°μ§λ©°, μ’
λ₯λ:
+
+* `List`
+* `Tuple`
+* `Set`
+* `Dict`
+* `Optional`
+* ...λ±λ±
+
+μμ κ°μ νμ
μ **Generic(μ λ€λ¦) νμ
** νΉμ **Generics(μ λ€λ¦μ€)**λΌκ³ λΆλ¦½λλ€.
+
+### νμ
μΌλ‘μμ ν΄λμ€
+
+λ³μμ νμ
μΌλ‘ ν΄λμ€λ₯Ό μ μΈν μλ μμ΅λλ€.
+
+μ΄λ¦(name)μ κ°μ§ `Person` ν΄λμ€κ° μλ€κ³ ν΄λ΄
μλ€.
+
+```Python hl_lines="1-3"
+{!../../../docs_src/python_types/tutorial010.py!}
+```
+
+κ·Έλ κ² νλ©΄ λ³μλ₯Ό `Person`μ΄λΌκ³ μ μΈν μ μκ² λ©λλ€.
+
+```Python hl_lines="6"
+{!../../../docs_src/python_types/tutorial010.py!}
+```
+
+κ·Έλ¦¬κ³ μμλ λͺ¨λ μλν° λμμ λ°κ² λκ² μ£ .
+
+<img src="/img/python-types/image06.png">
+
+## Pydantic λͺ¨λΈ
+
+<a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a>μ λ°μ΄ν° κ²μ¦(Validation)μ μν νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬μ
λλ€.
+
+λΉμ μ μμ±λ€μ ν¬ν¨ν ν΄λμ€ ννλ‘ "λͺ¨μ(shape)"μ μ μΈν μ μμ΅λλ€.
+
+κ·Έλ¦¬κ³ κ° μμ±μ νμ
μ κ°μ§κ³ μμ΅λλ€.
+
+μ΄ ν΄λμ€λ₯Ό νμ©νμ¬μ κ°μ κ°μ§κ³ μλ μΈμ€ν΄μ€λ₯Ό λ§λ€κ² λλ©΄, νμν κ²½μ°μλ μ λΉν νμ
μΌλ‘ λ³νκΉμ§ μν€κΈ°λ νμ¬ λ°μ΄ν°κ° ν¬ν¨λ κ°μ²΄λ₯Ό λ°νν©λλ€.
+
+κ·Έλ¦¬κ³ κ²°κ³Ό κ°μ²΄μ λν΄μλ μλν°μ λμμ λ°μ μ μκ² λ©λλ€.
+
+Pydantic 곡μ λ¬Έμ μμ:
+
+```Python
+{!../../../docs_src/python_types/tutorial011.py!}
+```
+
+!!! info "μ 보"
+ Pydantic<μ λν΄ λ λ°°μ°κ³ μΆλ€λ©΄ <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">곡μ λ¬Έμ</a>λ₯Ό μ°Έκ³ νμΈμ.</a>
+
+
+**FastAPI**λ λͺ¨λ Pydanticμ κΈ°λ°μΌλ‘ λμ΄ μμ΅λλ€.
+
+μ΄ λͺ¨λ κ²μ΄ μ€μ λ‘ μ΄λ»κ² μ¬μ©λλμ§μ λν΄μλ [μμ΅μ - μ¬μ©μ μλ΄μ](tutorial/index.md){.internal-link target=_blank} μμ λ λ§μ΄ νμΈνμ€ μ μμ΅λλ€.
+
+## **FastAPI**μμμ νμ
ννΈ
+
+**FastAPI**λ μ¬λ¬ λΆλΆμμ νμ
ννΈμ μ₯μ μ μ·¨νκ³ μμ΅λλ€.
+
+**FastAPI**μμ νμ
ννΈμ ν¨κ» λ§€κ°λ³μλ₯Ό μ μΈνλ©΄ μ₯μ μ:
+
+* **μλν° λμ**.
+* **νμ
νμΈ**.
+
+...κ·Έλ¦¬κ³ **FastAPI**λ κ°μ μ μλ₯Ό μλμλ μ μ©ν©λλ€:
+
+* **μꡬμ¬ν μ μ**: μμ² κ²½λ‘ λ§€κ°λ³μ, 쿼리 λ§€κ°λ³μ, ν€λ, λ°λ, μμ‘΄μ± λ±.
+* **λ°μ΄ν° λ³ν**: μμ²μμ μꡬν νμ
μΌλ‘.
+* **λ°μ΄ν° κ²μ¦**: κ° μμ²λ§λ€:
+ * λ°μ΄ν°κ° μ ν¨νμ§ μμ κ²½μ°μλ **μλμΌλ‘ μλ¬**λ₯Ό λ°μν©λλ€.
+* OpenAPIλ₯Ό νμ©ν **API λ¬Έμν**:
+ * μλμΌλ‘ μνΈμμ©νλ μ μ μΈν°νμ΄μ€μ μ°μ΄κ² λ©λλ€.
+
+μ λ΄μ©μ΄ λ€μ μΆμμ μΌ μλ μμ§λ§, κ±±μ λ§μΈμ. [μμ΅μ - μ¬μ©μ μλ΄μ](tutorial/index.md){.internal-link target=_blank}μμ μ λΆ νμΈ κ°λ₯ν©λλ€.
+
+κ°μ₯ μ€μν 건, νμ€ νμ΄μ¬ νμ
μ ν κ³³μμ(ν΄λμ€λ₯Ό λνκ±°λ, λ°μ½λ μ΄ν° μ¬μ©νλ λμ ) μ¬μ©ν¨μΌλ‘μ¨ **FastAPI**κ° λΉμ μ μν΄ λ§μ μΌμ ν΄μ€λ€λ μ¬μ€μ΄μ£ .
+
+!!! info "μ 보"
+ λ§μ½ λͺ¨λ μμ΅μλ₯Ό λ€ λ³΄μμμλ νμ
μ λν΄μ λ λ³΄κ³ μ λ°©λ¬Έν κ²½μ°μλ <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">`mypy`μμ μ 곡νλ "cheat sheet"</a>μ΄ μ’μ μλ£κ° λ κ²λλ€.