Files
2nd/10_Wiki/Topics/AI/Discriminated-Unions.md
T

30 lines
1.7 KiB
Markdown

---
id: P-REINFORCE-AI-DISCRIMINATED-UNIONS
category: "[[10_Wiki/💡 Topics/AI]]"
confidence_score: 0.98
tags: [TypeScript, TypeSystem, Patterns, Safety]
last_reinforced: 2026-04-20
---
# [[Discriminated-Unions]] (구별된 유니온)
## 📌 한 줄 통찰 (The Karpathy Summary)
> "이름표를 보고 타입을 가려내는 타입스크립트의 가장 우아한 분기 처리." 공통 속성(리터럴 타입)을 사용하여 여러 타입이 섞인 유니온에서 특정 타입을 완벽하게 추론해내는 패턴이다.
## 📖 구조화된 지식 (Synthesized Content)
- **The Schema**:
- 모든 타입이 동일한 이름의 속성(예: `kind` 또는 `type`)을 가지되, 그 값은 고유한 문자열 리터럴이어야 한다.
- `type Shape = { kind: 'circle'; radius: number } | { kind: 'rect'; width: number; height: number };`
- **Type Guarding**:
- `if` 혹은 `switch` 문으로 `kind` 값을 체크하면, 스코프 내부에서 타입스크립트가 자동으로 타입을 좁혀준다(Narrowing).
- **Core Benefit**:
- 오타 방지 및 런타임 안정성 확보.
- 모든 케이스를 처리했는지 검사하는 **Exhaustiveness Checking** 구현 가능.
## ⚠️ 모순 및 업데이트 (RL Update)
- 구별된 유니온은 강력하지만, 데이터 소스가 외부(API 등)인 경우 수신 데이터에 실제로 해당 '이름표'가 있는지 보장할 수 없다. 따라서 Zod와 같은 런타임 스키마 검증 도구로 입구를 보호한 뒤 내부 로직에서 유니온을 사용하는 것이 모범 사례다.
## 🔗 지식 연결 (Graph)
- Related: [[Exhaustiveness-Checking]] , [[Type-Guards]]
- Context: [[Redux-Reducers-Design]]