--- id: wiki-2026-0508-discriminated-unions title: Discriminated Unions category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-DIUN-001] duplicate_of: none source_trust_level: A confidence_score: 0.98 tags: [auto-reinforced, discriminated-unions, tagged-unions, typescript, error-handling, type-safety, Functional-Programming] raw_sources: [] last_reinforced: 2026-04-20 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Discriminated-Unions]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "νƒ€μž…μ˜ ν™•μ‹€ν•œ μ΄λ¦„ν‘œ: μ—¬λŸ¬ κ°€λŠ₯ν•œ 데이터 ν˜•νƒœ 쀑 'ν˜„μž¬ μ–΄λ–€ ν˜•νƒœμΈμ§€'λ₯Ό λͺ…ν™•ν•œ κ΅¬λΆ„μž(Tag)둜 λ°•μ œν•˜μ—¬, 쑰건문 μ•ˆμ—μ„œ μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž…μ„ μ™„λ²½ν•˜κ²Œ μΆ”λ‘ ν•˜κ²Œ λ§Œλ“€κ³  λŸ°νƒ€μž„ μ—λŸ¬μ˜ κ°€λŠ₯성을 μ›μ²œ λ΄‰μ‡„ν•˜λŠ” κ²¬κ³ ν•œ 방패." ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) κ΅¬λ³„λœ 곡용체(Discriminated-Unions, Tagged Unions)λŠ” κ³΅ν†΅λœ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ 속성(Discriminant)을 μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜λ₯Ό μ•ˆμ „ν•˜κ²Œ μ„ νƒν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. 1. **3λŒ€ 쑰건**: * **Union of Types**: μ—¬λŸ¬ νƒ€μž…μ΄ κ²°ν•©λœ ν•©μ§‘ν•© νƒ€μž…. * **Discriminant Property**: 각 νƒ€μž…μ— κ³΅ν†΅μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” λ¦¬ν„°λŸ΄ 속성 (예: `type: 'success' | 'error'`). * **Type Guarding**: `switch`λ‚˜ `if` 문을 톡해 ν•΄λ‹Ή 속성을 κ²€μ‚¬ν•˜λ©΄, 블둝 λ‚΄λΆ€μ—μ„œ ν•΄λ‹Ή νƒ€μž…μœΌλ‘œλ§Œ μžλ™ μΆ•μ†Œ(Narrowing). 2. **μ™œ μ€‘μš”ν•œκ°€?**: * μ—λŸ¬ 핸듀링 μ‹œ `status` 값에 따라 `data`κ°€ μžˆμ„μ§€ `error`κ°€ μžˆμ„μ§€ μ»΄νŒŒμΌλŸ¬κ°€ μ •ν™•νžˆ μ•Œκ²Œ ν•˜μ—¬, μ •μ˜λ˜μ§€ μ•Šμ€ 속성 μ ‘κ·Ό μ •μ±…(Undefined errors)을 막기 λ•Œλ¬Έμž„. ([[Reliability]]와 μ—°κ²°) ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌**: κ³Όκ±° μžλ°”μŠ€ν¬λ¦½νŠΈ 정책은 'duck typing'에 μ˜μ‘΄ν•˜μ—¬ λŸ°νƒ€μž„μ— 일일이 `if(data)` 등을 체크해야 ν–ˆμœΌλ‚˜, TS 정책은 κ΅¬λ³„λœ 곡용체 정책을 톡해 '컴파일 νƒ€μž„'에 λͺ¨λ“  경둜 정책을 검증함(RL Update). - **μ •μ±… λ³€ν™”(RL Update)**: μ΄μ œλŠ” λ‹¨μˆœ μ—λŸ¬ 처리λ₯Ό λ„˜μ–΄, λ³΅μž‘ν•œ μƒνƒœ λ¨Έμ‹  μ •μ±…(FSM)μ΄λ‚˜ Redux μ•‘μ…˜ νƒ€μž… μ •μ±… 등을 μ •μ˜ν•˜λŠ” ν‘œμ€€ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ μ •μ±…μœΌλ‘œ 자리 작음. ([[State-Space]]와 μ—°κ²°) ## πŸ”— 지식 μ—°κ²° (Graph) - [[Reliability]], [[State-Space]], [[Technical-Architecture]], [[Logic]], [[Complexity-Theory]] - **Key Concept**: Algebraic Data Types (ADT). --- ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*