--- id: P-REINFORCE-AUTO-696914 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Union Types" --- # [[Union Types]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Union TypesλŠ” TypeScriptμ—μ„œ ν•˜λ‚˜μ˜ 값이 μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜λ₯Ό κ°€μ§ˆ 수 μžˆμŒμ„ λ‚˜νƒ€λ‚΄λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€ [1, 2]. μˆ˜μ§μ„ (`|`) 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ νƒ€μž…λ“€μ„ μ—°κ²°ν•˜λ©°(예: `string | number`), `any` νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 것보닀 νƒ€μž… μ•ˆμ „μ„±μ„ μœ μ§€ν•˜λ©΄μ„œλ„ μœ μ—°ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있게 ν•΄μ€λ‹ˆλ‹€ [1-3]. 집합둠적 κ΄€μ μ—μ„œλŠ” 두 개 μ΄μƒμ˜ νƒ€μž… 집합을 ν•©μΉœ ν•©μ§‘ν•©(Union)으둜 κΈ°λŠ₯ν•©λ‹ˆλ‹€ [4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **κΈ°λ³Έ λ™μž‘κ³Ό 곡톡 ν•„λ“œ μ œμ•½**: Union Types둜 μ •μ˜λœ λ³€μˆ˜λŠ” μ§€μ •λœ νƒ€μž…λ“€(`A | B`) 쀑 ν•˜λ‚˜μ˜ 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. κ·ΈλŸ¬λ‚˜ 이 λ³€μˆ˜μ˜ 속성에 μ ‘κ·Όν•  λ•Œ, TypeScriptλŠ” νƒ€μž… μ•ˆμ „μ„±μ„ μœ„ν•΄ μœ λ‹ˆμ˜¨μ— μ†ν•œ **λͺ¨λ“  νƒ€μž…μ— κ³΅ν†΅μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” λ©€λ²„μ—λ§Œ 접근을 ν—ˆμš©ν•©λ‹ˆλ‹€** [2]. 예λ₯Ό λ“€μ–΄ `Bird | Fish` νƒ€μž…μ˜ λ³€μˆ˜λΌλ©΄, λŸ°νƒ€μž„μ— μ–΄λ–€ νƒ€μž…μ΄ λ“€μ–΄μ˜¬μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 두 μΈν„°νŽ˜μ΄μŠ€μ— λͺ¨λ‘ μ •μ˜λœ λ©”μ„œλ“œλ§Œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2]. - **νƒ€μž… 쒁히기 (Type Narrowing)**: νŠΉμ • νƒ€μž…μ—λ§Œ μ†ν•œ 속성을 μ½κ±°λ‚˜ μ“°λ €λ©΄ λ¨Όμ € λ³€μˆ˜μ˜ νƒ€μž…μ„ μ’ν˜€μ•Ό ν•©λ‹ˆλ‹€ [8]. 이λ₯Ό μœ„ν•΄ `typeof`, `instanceof`, `in` μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, μ‚¬μš©μž μ •μ˜ νƒ€μž… κ°€λ“œ(Custom Type Guards)λ₯Ό ν™œμš©ν•˜μ—¬ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” λΆ„κΈ°(흐름) λ‚΄μ—μ„œ μ •ν™•ν•œ νƒ€μž…μ„ μΆ”λ‘ ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8-10]. - **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions)**: Union Typesλ₯Ό λ”μš± κ°•λ ₯ν•˜κ²Œ λ§Œλ“œλŠ” 핡심 νŒ¨ν„΄μž…λ‹ˆλ‹€ [7, 11]. μœ λ‹ˆμ˜¨μ„ κ΅¬μ„±ν•˜λŠ” 각 객체 νƒ€μž…μ— λ¦¬ν„°λŸ΄ νƒ€μž…μ˜ 곡톡 μ‹λ³„μž 속성(예: `kind: 'circle' | 'rectangle'`)을 μ„ μ–Έν•˜μ—¬, 이 속성을 λΉ„κ΅ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ TypeScriptκ°€ μ˜¬λ°”λ₯Έ νƒ€μž…μœΌλ‘œ 쒁힐 수 있게 λ•μŠ΅λ‹ˆλ‹€ [12-14]. 이 νŒ¨ν„΄μ€ μƒνƒœ 머신을 λͺ¨λΈλ§ν•˜κ±°λ‚˜ 잘λͺ»λœ μƒνƒœμ˜ 쑰합을 μ›μ²œμ μœΌλ‘œ 막을 λ•Œ 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€ [15, 16]. - **μ™„μ „μ„± 검사 (Exhaustiveness Checking)**: 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨μ„ `switch` 문으둜 λΆ„κΈ° μ²˜λ¦¬ν•  λ•Œ, `never` νƒ€μž…μ„ ν™œμš©ν•΄ λͺ¨λ“  λΆ„κΈ°λ₯Ό μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν–ˆλŠ”μ§€ μ»΄νŒŒμΌλŸ¬μ—κ²Œ 검사받을 수 μžˆμŠ΅λ‹ˆλ‹€ [17-19]. λ§Œμ•½ μœ λ‹ˆμ˜¨ νƒ€μž…μ— μƒˆλ‘œμš΄ λ³€ν˜•(Variant)이 μΆ”κ°€λ˜μ—ˆλŠ”λ° `switch` λ¬Έμ—μ„œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, `never` νƒ€μž… 검사에 κ±Έλ € 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜λ―€λ‘œ λˆ„λ½μ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [18-20]. - **Type Brands의 λŒ€μ•ˆ**: κ°’μ˜ μ’…λ₯˜κ°€ 미리 μ •ν•΄μ Έ μžˆλŠ” 상황이라면, λ³΅μž‘ν•œ Branded Typesλ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 μ•Œλ €μ§„ 값듀을 Union Types둜 κ΅¬μ„±ν•˜λŠ” 것이 κ°’μ˜ μ’…λ₯˜λ₯Ό μ •ν™•νžˆ μ„€λͺ…ν•˜λŠ” 데 μœ λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [21, 22]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Intersection Types]], [[Discriminated Unions]], [[Type Narrowing]], [[Set Theory]] - **Projects/Contexts:** [[TypeScript Type System]], [[State Management]] - **Contradictions/Notes:** Union TypesλŠ” κ°’μ˜ μœ μ—°μ„±μ„ 보μž₯(`A` ν˜Ήμ€ `B` 쀑 ν•˜λ‚˜ ν—ˆμš©)ν•˜μ§€λ§Œ, 객체 속성에 μ ‘κ·Όν•  λ•ŒλŠ” μœ λ‹ˆμ˜¨μ˜ λͺ¨λ“  νƒ€μž…μ— κ³΅ν†΅μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 속성(ꡐ집합 ν˜•νƒœ)만 μ ‘κ·Όν•  수 μžˆλŠ” 엄격함이 μžˆμœΌλ―€λ‘œ 이λ₯Ό λ‹€λ£° λ•ŒλŠ” 항상 νƒ€μž… 쒁히기(Type Narrowing)κ°€ μ„ ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [2, 8]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/Union Types.md]] ---