--- id: P-REINFORCE-AUTO-0C762B 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)|μ™„μ „μ„± 검사(Exhaustiveness Checking)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > μ™„μ „μ„± 검사(Exhaustiveness Checking)λŠ” νƒ€μž… μ‹œμŠ€ν…œ λ‚΄μ—μ„œ νŠΉμ • μœ λ‹ˆμ˜¨ νƒ€μž…μ˜ λͺ¨λ“  κ°€λŠ₯ν•œ μΌ€μ΄μŠ€(λ³€ν˜•)κ°€ μ½”λ“œμƒμ—μ„œ 빠짐없이 μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€λ₯Ό 컴파일 μ‹œμ μ— κ²€μ¦ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€[1-3]. 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)κ³Ό ν•¨κ»˜ κ²°ν•©ν•˜μ—¬ 주둜 μ‚¬μš©λ˜λ©°, μƒˆλ‘œμš΄ μƒνƒœκ°€ μΆ”κ°€λ˜μ—ˆμ„ λ•Œ 이λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ 뢄기문이 μ‘΄μž¬ν•˜λ©΄ μ¦‰μ‹œ 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€[2, 3]. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” λŸ°νƒ€μž„ 버그λ₯Ό 사전에 μ˜ˆλ°©ν•˜κ³  잘λͺ»λœ μƒνƒœκ°€ μ‹œμŠ€ν…œμ„ ν†΅κ³Όν•˜λŠ” 것을 μ›μ²œμ μœΌλ‘œ 차단할 수 μžˆμŠ΅λ‹ˆλ‹€[4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **κΈ°λ³Έ μž‘λ™ 원리:** μ™„μ „μ„± κ²€μ‚¬λŠ” λ°μ΄ν„°μ˜ λͺ¨λ“  κ°€λŠ₯ν•œ ν˜•νƒœκ°€ `switch` λ¬Έ λ“±μ˜ λΆ„κΈ° κ΅¬μ‘°μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ λ‹€λ£¨μ–΄μ‘ŒλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€[1, 2]. νŠΉμ • μœ λ‹ˆμ˜¨ νƒ€μž…μ— μƒˆλ‘œμš΄ ν˜•νƒœ(Shape)λ‚˜ μƒνƒœλ₯Ό μΆ”κ°€ν–ˆμ§€λ§Œ, 이λ₯Ό μ œμ–΄λ¬Έμ—μ„œ μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것을 μžŠμ—ˆλ‹€λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” λˆ„λ½λœ 뢀뢄에 λŒ€ν•΄ μ—λŸ¬λ₯Ό λ˜μ§‘λ‹ˆλ‹€[2, 3]. μ΄λŠ” λŸ°νƒ€μž„μ— λ°œμƒν•  수 μžˆλŠ” 잠재적 결함을 컴파일 μ‹œμ μ˜ μ—λŸ¬λ‘œ μ „ν™˜ν•΄ μ€λ‹ˆλ‹€[3-5]. - **`never` νƒ€μž…μ„ ν™œμš©ν•œ 검사 기법:** TypeScriptμ—μ„œ μ™„μ „μ„± 검사λ₯Ό κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ ν™•μ‹€ν•œ 방법 쀑 ν•˜λ‚˜λŠ” `never` νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€[3, 6, 7]. λͺ¨λ“  μœ νš¨ν•œ μΌ€μ΄μŠ€λ₯Ό κ±ΈλŸ¬λ‚Έ ν›„ 남은 값을 `never` νƒ€μž…(예: `assertNever` ν•¨μˆ˜ λ“±)으둜 ν• λ‹Ήν•˜λ„λ‘ μž‘μ„±ν•©λ‹ˆλ‹€[7]. λ§Œμ•½ κ°œλ°œμžκ°€ μ‹€μˆ˜λ‘œ νŠΉμ • μΌ€μ΄μŠ€λ₯Ό λˆ„λ½ν–ˆλ‹€λ©΄, 남은 값은 `never`κ°€ μ•„λ‹Œ μ‹€μ œ νƒ€μž…(λˆ„λ½λœ νƒ€μž…)을 κ°€μ§€κ²Œ λ˜μ–΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜λ©°, μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 톡해 μ–΄λ–€ νƒ€μž…μ΄ λˆ„λ½λ˜μ—ˆλŠ”μ§€ λͺ…ν™•νžˆ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€[3, 7]. - **`strictNullChecks`λ₯Ό ν™œμš©ν•œ λ°˜ν™˜ νƒ€μž… 검사:** 또 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œλŠ” TypeScript의 `strictNullChecks` κΈ°λŠ₯을 켜고 ν•¨μˆ˜μ— λͺ…μ‹œμ μΈ λ°˜ν™˜ νƒ€μž…μ„ μ§€μ •ν•˜λŠ” 방식이 μžˆμŠ΅λ‹ˆλ‹€[6]. λͺ¨λ“  μΌ€μ΄μŠ€λ₯Ό μ² μ €νžˆ μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ 뢄기문은 μ•”λ¬΅μ μœΌλ‘œ `undefined`λ₯Ό λ°˜ν™˜ν•  κ°€λŠ₯성을 λ‚΄ν¬ν•˜κ²Œ λ˜λ―€λ‘œ, λ°˜ν™˜ νƒ€μž… κ·œμΉ™ μœ„λ°˜μœΌλ‘œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ 완전성을 κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€[6]. - **λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œμ˜ ν™œμš© νŒ¨ν„΄:** TypeScript의 κΈ°λ³Έ μ œμ–΄ ꡬ쑰뿐만 μ•„λ‹ˆλΌ, `ts-pattern`κ³Ό 같은 νŒ¨ν„΄ λ§€μΉ­ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλ„ `.exhaustive()` 문법을 ν™œμš©ν•˜μ—¬ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ μΌ€μ΄μŠ€λ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»΄νŒŒμΌλŸ¬κ°€ κ°μ§€ν•˜λ„λ‘ λ•μŠ΅λ‹ˆλ‹€[8]. λ˜ν•œ C#κ³Ό 같은 λ‹€λ₯Έ μ–Έμ–΄ ν™˜κ²½μ—μ„œλ„, κ²°κ³Όλ₯Ό μ² μ €νžˆ μ†Œμ§„(exhausting)ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일이 λ˜μ§€ μ•Šκ²Œ κ΅¬μ‘°ν™”ν•˜μ—¬ 였λ₯˜λ₯Ό μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” λ™μΌν•œ λͺ©μ μ˜ 섀계 방식이 μ‚¬μš©λ©λ‹ˆλ‹€[9]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[삭별 ᄀᅑ능ᄒᅑᆫ 유나온(Discriminated Unions)|식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)]], [[never ᄐᅑ압|never νƒ€μž…]], [[ᄐᅑ압 α„Œα…©α†Έα„’α…΅α„€α…΅(Type Narrowing)|νƒ€μž… 쒁히기(Type Narrowing)]] - **Projects/Contexts:** TypeScript 컴파일러의 정적 νƒ€μž… μ‹œμŠ€ν…œ, νŒ¨ν„΄ λ§€μΉ­ 라이브러리(ts-pattern λ“±) - **Contradictions/Notes:** TypeScriptμ—μ„œ `strictNullChecks`λ₯Ό ν™œμš©ν•œ λ°˜ν™˜ νƒ€μž… 검사 방식은 κ΅¬ν˜• μ½”λ“œλ² μ΄μŠ€μ—μ„œ 항상 μ›ν™œν•˜κ²Œ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 있으며 λ‹€μ†Œ λ―Έλ¬˜ν•œ 방식인 반면, `never` νƒ€μž…μ„ ν™œμš©ν•œ 검사 방식은 였λ₯˜ λ©”μ‹œμ§€μ— λˆ„λ½λœ νƒ€μž… 이름이 ν¬ν•¨λ˜μ–΄ 더 λͺ…ν™•ν•˜κ²Œ 문제λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€[6, 7]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/μ™„μ „μ„± 검사(Exhaustiveness Checking).md ---