--- id: P-REINFORCE-AUTO-4245C8 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - νƒ€μž… 쒁히기 (Type Narrowing)" --- # [[νƒ€μž… 쒁히기 (Type Narrowing)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > νƒ€μž… 쒁히기(Type Narrowing)λŠ” TypeScriptμ—μ„œ μœ λ‹ˆμ˜¨ νƒ€μž…κ³Ό 같이 μ—¬λŸ¬ νƒ€μž…μ˜ κ°€λŠ₯성을 λ‚΄ν¬ν•˜λŠ” λ³€μˆ˜λ₯Ό λ‹€λ£° λ•Œ, μ½”λ“œ 흐름 뢄석(Code Flow Analysis)을 톡해 더 ꡬ체적이고 ν•œμ •λœ νƒ€μž…μœΌλ‘œ μ€„μ—¬λ‚˜κ°€λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1, 2]. 이λ₯Ό 톡해 μ»΄νŒŒμΌλŸ¬λŠ” νŠΉμ • μ½”λ“œ 블둝 λ‚΄μ—μ„œ κ°’μ˜ ν˜•νƒœλ₯Ό ν™•μ‹ ν•  수 있게 되며, κ°œλ°œμžλŠ” νŠΉμ • νƒ€μž…μ—λ§Œ μ‘΄μž¬ν•˜λŠ” 속성에 μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2-4]. 주둜 `typeof`, `instanceof`, `in` μ—°μ‚°μž λ˜λŠ” μ‚¬μš©μž μ •μ˜ νƒ€μž… κ°€λ“œ 및 νŒλ³„μž(Discriminant)λ₯Ό ν™œμš©ν•˜μ—¬ μˆ˜ν–‰λ©λ‹ˆλ‹€ [5, 6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **νƒ€μž… 쒁히기의 λͺ©μ  및 μž‘λ™ 원리** TypeScript의 νƒ€μž… κ²€μ‚¬λŠ” κ°’μ˜ λŸ°νƒ€μž„ ν˜•νƒœ(ꡬ쑰)에 κΈ°λ°˜ν•˜λ©°, μ½”λ“œ μ œμ–΄ 흐름 뢄석을 톡해 νƒ€μž…μ„ μΆ”λ‘ ν•©λ‹ˆλ‹€ [2, 7]. 값이 μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜μΌ 수 μžˆμ„ λ•Œ(예: `string | number`), ν•΄λ‹Ή νƒ€μž…μ— κ³ μœ ν•œ λ©”μ„œλ“œλ‚˜ 속성을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 사전에 νƒ€μž… 쒁히기λ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 8]. **νƒ€μž…μ„ μ’νžˆλŠ” μ£Όμš” 기법** * **λ‚΄μž₯ νƒ€μž… κ°€λ“œ (Built-in Type Guards):** `typeof`, `instanceof`, 동등성 검사(equality checks), `in` μ—°μ‚°μž 등을 μ‚¬μš©ν•˜μ—¬ μ œμ–΄λ¬Έμ—μ„œ 쑰건을 κ²€μ‚¬ν•˜λ©΄, TypeScriptλŠ” λ‚΄λΆ€μ μœΌλ‘œ 이λ₯Ό μΈμ‹ν•˜κ³  블둝 λ‚΄λΆ€μ˜ λ³€μˆ˜ νƒ€μž…μ„ μžλ™μœΌλ‘œ μ’ν˜€μ€λ‹ˆλ‹€ [2, 5, 6]. 예λ₯Ό λ“€μ–΄ `typeof x === 'string'` 쑰건문 블둝 λ‚΄λΆ€μ—μ„œ `x`λŠ” `string` νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λ©λ‹ˆλ‹€ [2]. * **μ‚¬μš©μž μ •μ˜ νƒ€μž… μ„œμˆ μ–΄ (Type Predicates / Custom Type Guards):** νŠΉμ • νƒ€μž…μΈμ§€ κ²€μ‚¬ν•˜λŠ” 둜직이 λ³΅μž‘ν•  경우, λ°˜ν™˜ νƒ€μž…μ— `is` ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 9]. ν•¨μˆ˜κ°€ `true` ν˜Ήμ€ `false`λ₯Ό λ°˜ν™˜ν•˜λŠ” 결과에 따라 TypeScript의 νƒ€μž… μ‹œμŠ€ν…œμ΄ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ„ 쒁히게 λ©λ‹ˆλ‹€ [6, 9]. * **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions / Tagged Unions):** μœ λ‹ˆμ˜¨μ„ κ΅¬μ„±ν•˜λŠ” 각 객체 νƒ€μž…μ΄ κ³΅μœ ν•˜λŠ” 곡톡 λ¦¬ν„°λŸ΄ 속성(νŒλ³„μž)을 λ‘λŠ” κΈ°λ²•μž…λ‹ˆλ‹€ [3, 10, 11]. `switch`λ¬Έμ΄λ‚˜ `if`문으둜 이 νŒλ³„μžλ₯Ό κ²€μ‚¬ν•˜μ—¬ νƒ€μž…μ„ 쒁히면, νƒ€μž… μ‹œμŠ€ν…œμ€ ν•΄λ‹Ή 블둝 μ•ˆμ—μ„œ 객체의 νƒ€μž…μ„ μ•ˆμ „ν•˜κ²Œ ν•œ κ°€μ§€λ‘œ ν™•μ •ν•΄μ€λ‹ˆλ‹€ [12-14]. μ΄λŠ” λŸ°νƒ€μž„ νƒ€μž… κ²€μ‚¬μ˜ 뢀담을 쀄이고 μ—λŸ¬ μ²˜λ¦¬μ™€ μƒνƒœ 관리에 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€ [14]. **보쑰 μ—°μ‚°μžμ˜ ν™œμš©** TypeScript의 `satisfies` μ—°μ‚°μžλ₯Ό 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄, 객체가 νŠΉμ • νƒ€μž… ꡬ쑰λ₯Ό λ§Œμ‘±ν•˜λŠ”μ§€ κ²€μ‚¬ν•˜λ©΄μ„œλ„ νŒλ³„μžμ˜ λ¦¬ν„°λŸ΄ νƒ€μž…(Literal Type)을 보쑴해 μ£Όμ–΄ μ˜¬λ°”λ₯Έ νƒ€μž… μ’νžˆκΈ°κ°€ μ›ν™œν•˜κ²Œ 이루어지도둝 λ•μŠ΅λ‹ˆλ‹€ [15]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[μœ λ‹ˆμ˜¨ νƒ€μž… (Union Types)]], [[식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions)]], [[νƒ€μž… κ°€λ“œ (Type Guards)]], [[νƒ€μž… μ„œμˆ μ–΄ (Type Predicates)]] - **Projects/Contexts:** [[μ œμ–΄ 흐름 뢄석 (Control Flow Analysis)]], [[API 응닡 및 μƒνƒœ λͺ¨λΈλ§ (State Modeling and API Responses)]] - **Contradictions/Notes:** νƒ€μž… μ„œμˆ μ–΄(Type Predicates)λ₯Ό μ‚¬μš©ν•˜μ—¬ νƒ€μž…μ„ 쒁힐 λ•Œ, TypeScript μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜ λ‚΄λΆ€μ˜ 둜직이 κ°œλ°œμžκ°€ μ˜λ„ν•œ λΈŒλžœλ“œ νƒ€μž…μ΄λ‚˜ 쒁히기 쑰건과 μ‹€μ œλ‘œ μΌμΉ˜ν•˜λŠ”μ§€κΉŒμ§€λŠ” κ²€μ‚¬ν•˜μ§€ μ•Šκ³  μ „μ μœΌλ‘œ μ½”λ“œ μž‘μ„±μžμ˜ 논리에 μ˜μ‘΄ν•˜λ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [9]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/νƒ€μž… 쒁히기 (Type Narrowing).md]] ---