--- id: P-REINFORCE-AUTO-98C2AC category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - μ™„μ „μ„± 검사 (Exhaustiveness Checking)" --- # [[μ™„μ „μ„± 검사 (Exhaustiveness Checking)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **κ°œλ… 및 ν•„μš”μ„±:** μ™„μ „μ„± κ²€μ‚¬λŠ” μ‹œμŠ€ν…œμ΄ ν™•μž₯λ˜κ±°λ‚˜ νƒ€μž…μ΄ 변경될 λ•Œ λ°œμƒν•˜λŠ” λΆ€μž‘μš©μ„ μ›μ²œ μ°¨λ‹¨ν•˜λŠ” λ°©μ–΄ κΈ°μ œμž…λ‹ˆλ‹€ [3]. 예λ₯Ό λ“€μ–΄, νŠΉμ • μœ λ‹ˆμ˜¨ νƒ€μž…μ— μƒˆλ‘œμš΄ ν˜•νƒœ(예: μƒˆλ‘œμš΄ λ„ν˜• νƒ€μž…, λ„€νŠΈμ›Œν¬ μƒνƒœ, API 응닡 λ“±)κ°€ μΆ”κ°€λ˜μ—ˆμ„ λ•Œ, 기쑴의 λΆ„κΈ°λ¬Έ(`switch` λ“±)μ—μ„œ 이λ₯Ό 닀루지 μ•ŠμœΌλ©΄ 컴파일 νƒ€μž„ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ λˆ„λ½ 사싀을 μ¦‰κ°μ μœΌλ‘œ μ•Œλ €μ€λ‹ˆλ‹€ [1, 2, 4]. - **`never` νƒ€μž…μ„ ν™œμš©ν•œ 검증 기법:** κ°€μž₯ κ°•λ ₯ν•˜κ³  λͺ…μ‹œμ μΈ μ™„μ „μ„± 검사 방법은 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ `never` νƒ€μž…μ„ ν™œμš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λΆ„κΈ°λ¬Έμ—μ„œ μœ λ‹ˆμ˜¨μ˜ λͺ¨λ“  κ°€λŠ₯ν•œ μΌ€μ΄μŠ€λ₯Ό μ²˜λ¦¬ν•œ ν›„, 남은 값을 `default` λΈ”λ‘μ΄λ‚˜ `assertNever`와 같은 검증 ν•¨μˆ˜λ‘œ μ „λ‹¬ν•˜μ—¬ `never` νƒ€μž…μ— ν• λ‹Ήν•˜λ„λ‘ μž‘μ„±ν•©λ‹ˆλ‹€ [3, 5]. λ§Œμ•½ κ°œλ°œμžκ°€ μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ μΌ€μ΄μŠ€κ°€ λ‚¨μ•„μžˆλ‹€λ©΄, ν•΄λ‹Ή λ³€μˆ˜λŠ” `never`κ°€ μ•„λ‹Œ μ‹€μ œ ν• λ‹Ή κ°€λŠ₯ν•œ νƒ€μž…μ„ κ°€μ§€κ²Œ λ˜λ―€λ‘œ "Type 'X' is not assignable to type 'never'"와 같은 컴파일 μ—λŸ¬λ₯Ό μ¦‰μ‹œ λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ [2, 3, 5]. - **λ°˜ν™˜ νƒ€μž… 지정을 ν†΅ν•œ 검증:** `strictNullChecks` μ˜΅μ…˜μ„ ν™œμ„±ν™”ν•˜κ³  ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€ [6]. λͺ¨λ“  `switch` μΌ€μ΄μŠ€λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  λΉ μ Έλ‚˜μ˜€λŠ” κ²½λ‘œκ°€ 생긴닀면, μ»΄νŒŒμΌλŸ¬λŠ” ν•΄λ‹Ή ν•¨μˆ˜κ°€ `undefined`λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€κ³  μΈμ§€ν•˜μ—¬ λͺ…μ‹œλœ λ°˜ν™˜ νƒ€μž…κ³Όμ˜ 뢈일치 μ—λŸ¬λ₯Ό λ³΄κ³ ν•©λ‹ˆλ‹€ [6]. - **라이브러리 및 κ³ κΈ‰ 문법 ν™œμš© (`ts-pattern`, `satisfies`):** `ts-pattern`κ³Ό 같은 νŒ¨ν„΄ λ§€μΉ­ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅ν•˜λŠ” `.exhaustive()` λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄, μ²˜λ¦¬λ˜μ§€ μ•Šμ€ λͺ¨λ“  경우λ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»΄νŒŒμΌλŸ¬κ°€ κ°μ§€ν•˜κ³  κ°•μ œν•˜λ„λ‘ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 8]. λ˜ν•œ, λΆ„κΈ°λ¬Έμ˜ λ§ˆμ§€λ§‰μ— `satisfies never` ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ λ‹€λ₯Έ μΌ€μ΄μŠ€κ°€ μ—†μŒμ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [9]. μ΄λŸ¬ν•œ νŒ¨ν„΄λ“€μ€ 'λΆˆκ°€λŠ₯ν•œ μƒνƒœ'λ₯Ό μ½”λ“œμƒμ—μ„œ ν‘œν˜„ν•˜μ§€ λͺ»ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [3]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions)]], [[never νƒ€μž…]], [[ts-pattern]], [[satisfies μ—°μ‚°μž]] - **Projects/Contexts:** [[νƒ€μž…μŠ€ν¬λ¦½νŠΈ μƒνƒœ 관리 및 λΆ„κΈ° 처리 섀계]] - **Contradictions/Notes:** μ†ŒμŠ€μ—μ„œλŠ” μ™„μ „μ„± κ²€μ‚¬μ˜ 효과λ₯Ό κΈμ •μ μœΌλ‘œ ν‰κ°€ν•˜μ§€λ§Œ, `ts-pattern` 라이브러리의 `.exhaustive()` 등을 ν™œμš©ν•œ κ³ λ„μ˜ μΆ”μƒν™”λŠ” κΈ°λ³Έ μ œμ–΄ ꡬ쑰(`if/else`, `switch`)보닀 μ„±λŠ₯이 ν˜„μ €νžˆ λ–¨μ–΄μ§€κ³  μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μ΄ 될 수 μžˆμŒμ„ κ²½κ³„ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ‹¨μˆœν•œ 쑰건의 경우, κΈ°μ‘΄ 방식과 `satisfies never` 등을 μ‘°ν•©ν•˜μ—¬ 가독성을 높이고 μ•ˆμ „ν•˜κ²Œ λΆ„κΈ°λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것이 더 λ‚˜μ„ 수 μžˆλ‹€κ³  μ‘°μ–Έν•©λ‹ˆλ‹€ [7-10]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/μ™„μ „μ„± 검사 (Exhaustiveness Checking).md]] ---