30 lines
1.7 KiB
Markdown
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]]
|