--- id: P-REINFORCE-AUTO-DEC013 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Discriminated Unions" --- # [[Discriminated Unions|Discriminated Unions]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Discriminated Unions(λ˜λŠ” 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨, νƒœκ·Έλœ μœ λ‹ˆμ˜¨)은 μ„œλ‘œ λ‹€λ₯Έ 데이터 ν˜•νƒœλ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ κ³΅ν†΅λœ λ¦¬ν„°λŸ΄ 속성(νŒλ³„μž, Discriminant)을 μ‚¬μš©ν•˜λŠ” TypeScript의 νŒ¨ν„΄μž…λ‹ˆλ‹€ [1-3]. 일반적인 μœ λ‹ˆμ˜¨ νƒ€μž…κ³Ό 달리, μ»΄νŒŒμΌλŸ¬κ°€ νŒλ³„μž 속성을 ν™•μΈν•˜μ—¬ νƒ€μž…μ„ μžλ™μœΌλ‘œ μ•ˆμ „ν•˜κ²Œ 쒁힐 수(Narrowing) 있게 ν•΄μ€λ‹ˆλ‹€ [4-6]. 이λ₯Ό 톡해 μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœμ˜ ν‘œν˜„μ„ μ›μ²œμ μœΌλ‘œ μ°¨λ‹¨ν•˜κ³ , λͺ¨λ“  κ°€λŠ₯ν•œ 경우λ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ κ°•μ œν•˜λŠ” μ™„μ „μ„± 검사(Exhaustiveness checking)λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 7, 8]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ 원리 및 νŠΉμ§•** Discriminated Union은 객체듀이 κ³΅ν†΅μœΌλ‘œ κ°€μ§€λŠ” μ‹λ³„μž ν•„λ“œ(주둜 `kind`, `type`, `status` 같은 λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄)λ₯Ό ν™œμš©ν•˜μ—¬ κ΅¬μ„±λ©λ‹ˆλ‹€ [2-4]. 이 곡톡 속성을 기반으둜 TypeScript의 μ½”λ“œ 흐름 뢄석이 μ§„ν–‰λ˜λ©°, νŠΉμ • λΈŒλžœμΉ˜μ—μ„œ νƒ€μž…μ„ λͺ…ν™•ν•˜κ²Œ μ’ν˜€μ€λ‹ˆλ‹€ [3, 4, 9]. μ΄λŠ” λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ „ν˜€ μΆ”κ°€λ˜μ§€ μ•ŠλŠ” 컴파일 νƒ€μž„ μ „μš© κ΅¬μ‘°μž…λ‹ˆλ‹€ [10]. * **μ£Όμš” μž₯점** κ°€μž₯ 큰 μž₯점은 μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ μ‘°ν•©μ˜ μƒνƒœ(Invalid states)λ₯Ό μ½”λ“œλ‘œ ν‘œν˜„ν•  수 μ—†κ²Œ λ§Œλ“€μ–΄ ꡬ쑰적으둜 버그λ₯Ό λ°©μ§€ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ [1, 7, 11]. λ˜ν•œ `switch` λ¬Έκ³Ό `never` νƒ€μž…μ„ κ²°ν•©ν•˜λ©΄ λͺ¨λ“  μœ λ‹ˆμ˜¨ μΌ€μ΄μŠ€κ°€ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ μ»΄νŒŒμΌλŸ¬κ°€ ν™•μΈν•˜λŠ” 'μ™„μ „μ„± 검사(Exhaustive checking)'κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€ [3, 12-14]. μœ λ‹ˆμ˜¨μ— μƒˆλ‘œμš΄ νƒ€μž… 멀버가 μΆ”κ°€λ˜μ—ˆμ„ λ•Œ 이λ₯Ό λˆ„λ½ν•œ μ½”λ“œλ₯Ό 즉각적인 컴파일 μ—λŸ¬λ‘œ 포착해 λ‚΄λ―€λ‘œ μœ μ§€λ³΄μˆ˜μ„±μ΄ 크게 ν–₯μƒλ©λ‹ˆλ‹€ [3, 8]. * **μ‚¬μš© 사둀 (Use Cases)** API 응닡 데이터 처리, 폼(Form) 핸듀링, Redux μŠ€νƒ€μΌμ˜ λ¦¬λ“€μ„œ(Reducer), λΌμš°ν„° μƒνƒœ 관리, 그리고 μƒνƒœ λ¨Έμ‹ (State Machine) νŒ¨ν„΄μ„ λͺ¨λΈλ§ν•˜λŠ” 데 맀우 μ ν•©ν•©λ‹ˆλ‹€ [7, 15-17]. λ³΅μž‘ν•œ μƒνƒœλ₯Ό ν‘œν˜„ν•΄μ•Ό ν•  λ•ŒλŠ” 닀쀑 νŒλ³„μž(Multiple Discriminants)λ₯Ό λ‘κ±°λ‚˜ μœ λ‹ˆμ˜¨μ„ 쀑첩(Nested)ν•˜λŠ” λ°©μ‹μœΌλ‘œλ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [15, 16]. * **μ£Όμ˜μ‚¬ν•­ 및 베슀트 ν”„λž™ν‹°μŠ€** νŒλ³„μžλ‘œλŠ” 항상 λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯되며, λͺ¨λ“  λΈŒλžœμΉ˜μ— 걸쳐 μΌκ΄€λœ νŒλ³„μž 속성을 포함해야 ν•©λ‹ˆλ‹€ [12, 16, 18]. νƒ€μž…μ„ 쒁힐 λ•ŒλŠ” `instanceof` μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  λ°˜λ“œμ‹œ νŒλ³„μž 속성을 확인해야 ν•©λ‹ˆλ‹€ [18]. 단, μ•„μ£Ό κ±°λŒ€ν•œ μ½”λ“œλ² μ΄μŠ€μ—μ„œ κ³Όλ„ν•˜κ²Œ λ³΅μž‘ν•œ μœ λ‹ˆμ˜¨ νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ TypeScript의 컴파일 속도가 느렀질 수 있으며, 깊게 쀑첩될 경우 μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό νŒŒμ•…ν•˜κΈ° μ–΄λ €μ›Œμ§ˆ 수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [10]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Union Types|Union Types]], [[Type Narrowing|Type Narrowing]], [[Exhaustiveness-Checking|Exhaustiveness Checking]], [[라ᄐα…₯α„…α…₯α†― ᄐᅑ압 (Literal Types)|Literal Types]], [[네ᄇα…₯ ᄐᅑ압 (never type)|never type]] - **Projects/Contexts:** React State Management, State Machine Pattern, API Response Handling, [[Redux-Reducers|Redux Reducers]] - **Contradictions/Notes:** Discriminated Union νŒ¨ν„΄μ€ νƒ€μž… μ•ˆμ •μ„±κ³Ό 예츑 κ°€λŠ₯성을 크게 λ†’μ—¬μ£Όμ§€λ§Œ, μœ λ‹ˆμ˜¨ νƒ€μž…μ΄ μ§€λ‚˜μΉ˜κ²Œ λ³΅μž‘ν•΄μ§€κ±°λ‚˜ κΉŠμ€ 쀑첩 ꡬ쑰λ₯Ό κ°€μ§€κ²Œ 되면 였히렀 TypeScript의 컴파일 μ„±λŠ₯을 μ €ν•˜μ‹œν‚€κ³  μ—λŸ¬ λ©”μ‹œμ§€μ˜ 가독성을 λ–¨μ–΄λœ¨λ¦¬λŠ” λΆ€μž‘μš©(단점)을 μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/Discriminated Unions.md ---