--- id: [[P-Reinforce|P-Reinforce]]-AUTO-9B5810 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - κ³Όμž‰ 속성 체크 ([[Excess Property Checking|Excess Property Checking]])" --- # [[α„€α…ͺα„‹α…΅α†Ό 속ᄉα…₯α†Ό α„Žα…¦α„α…³ (Excess Property Checking)|κ³Όμž‰ 속성 체크 (Excess Property Checking]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > TypeScript의 κ³Όμž‰ 속성 체크(Excess Property Checking, EPC)λŠ” 객체 λ¦¬ν„°λŸ΄μ΄ λ‹€λ₯Έ λ³€μˆ˜μ— 직접 ν• λ‹Ήλ˜κ±°λ‚˜ ν•¨μˆ˜μ˜ 인자둜 전달될 λ•Œ, λŒ€μƒ νƒ€μž…μ— μ •μ˜λ˜μ§€ μ•Šμ€ 속성이 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό μ—„κ²©ν•˜κ²Œ κ²€μ‚¬ν•˜λŠ” κΈ°λŠ₯이닀[1-4]. μ΄λŠ” ꡬ쑰적 타이핑([[Structural Typing|Structural Typing]])의 μœ μ—°ν•¨μœΌλ‘œ 인해 속성 μ΄λ¦„μ˜ μ˜€νƒ€λ‚˜ 잘λͺ»λœ 데이터가 μœ μž…λ˜μ–΄ λ°œμƒν•˜λŠ” λŸ°νƒ€μž„ 였λ₯˜λ₯Ό 컴파일 μ‹œμ μ— λ°©μ§€ν•˜λŠ”TypeScript의 핡심 λ°©μ–΄ 기제둜 μž‘λ™ν•œλ‹€[5-7]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ„μž… λ°°κ²½ 및 λͺ©μ **: TypeScriptλŠ” 기본적으둜 객체의 ν˜•νƒœ(ꡬ쑰)κ°€ μΌμΉ˜ν•˜λ©΄ νƒ€μž…μ˜ ν˜Έν™˜μ„±μ„ μΈμ •ν•˜λŠ” ꡬ쑰적 타이핑(덕 타이핑) 원칙을 λ”°λ₯Έλ‹€[7-9]. κ·ΈλŸ¬λ‚˜ λŒ€μƒ νƒ€μž…μ˜ 속성을 μΆ©μ‘±ν•˜λ”λΌλ„ μ˜€νƒ€(예: `color` λŒ€μ‹  `colour`λ₯Ό μž…λ ₯)와 같은 μ‹€μˆ˜λ‘œ μž‰μ—¬ 속성이 ν¬ν•¨λ˜λ©΄ μ˜λ„μΉ˜ μ•Šμ€ λŸ°νƒ€μž„ λ™μž‘μ΄ λ°œμƒν•  수 μžˆλ‹€[5, 6]. μ΄λŸ¬ν•œ ν•œκ³„λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ TypeScriptλŠ” 객체 λ¦¬ν„°λŸ΄μ— λŒ€ν•΄ μ˜ˆμ™Έμ μœΌλ‘œ 더 μ—„κ²©ν•œ μž£λŒ€λ₯Ό λ“€μ΄λŒ€λŠ” 'κ³Όμž‰ 속성 체크'λ₯Ό μˆ˜ν–‰ν•œλ‹€[1, 5]. - **λ™μž‘ 방식과 ν•œκ³„ (우회 ν˜„μƒ)**: κ³Όμž‰ 속성 μ²΄ν¬λŠ” 객체 λ¦¬ν„°λŸ΄μ΄ λ³€μˆ˜μ— 직접 ν• λ‹Ήλ˜κ±°λ‚˜ 인자둜 μ „λ‹¬λ˜λŠ” νŠΉμˆ˜ν•œ κ²½μš°μ—λ§Œ μž‘λ™ν•œλ‹€[3, 5]. λ§Œμ•½ λ³€μˆ˜λ₯Ό λ¨Όμ € μ„ μ–Έν•œ ν›„ 이λ₯Ό λ‹€λ₯Έ νƒ€μž…μ— κ°„μ ‘μ μœΌλ‘œ ν• λ‹Ήν•˜κ±°λ‚˜ μ œλ„€λ¦­ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, 두 객체 사이에 μ΅œμ†Œ ν•˜λ‚˜μ˜ 곡톡 μ†μ„±λ§Œ μ‘΄μž¬ν•œλ‹€λ©΄ κ³Όμž‰ 속성 체크가 μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€[10-12]. μ΄λŠ” μ‹œμŠ€ν…œμ΄ "μ΅œμ†Œ μš”κ±΄ μΆ©μ‘±"μ΄λΌλŠ” ꡬ쑰적 νƒ€μ΄ν•‘μ˜ κΈ°λ³Έ μ›μΉ™μœΌλ‘œ λ˜λŒμ•„κ°€κΈ° λ•Œλ¬Έμ΄λ‹€[12]. (단, 선택적 μ†μ„±λ§Œ κ°€μ§„ 'μ•½ν•œ νƒ€μž…(Weak Type)'의 κ²½μš°μ—λŠ” 곡톡 속성이 μ•„μ˜ˆ μ—†μœΌλ©΄ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” μ•½ν•œ νƒ€μž… 탐지가 μž‘λ™ν•œλ‹€[13, 14].) - **우회둜 μΈν•œ λΆ€μž‘μš©**: κ°„μ ‘ ν• λ‹Ή 등을 톡해 κ³Όμž‰ 속성 체크가 우회되면, μ˜ˆμƒμΉ˜ λͺ»ν•œ μž‰μ—¬ 데이터가 객체 내뢀에 μˆ¨μ–΄λ“€ 수 μžˆλ‹€[12]. μ΄λŠ” React μ»΄ν¬λ„ŒνŠΈ λ“±μ—μ„œ μœ νš¨ν•˜μ§€ μ•Šμ€ 속성이 DOM으둜 λ„˜μ–΄κ°€ κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚€κ±°λ‚˜, λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μœ λ°œν•˜κ³  λŸ°νƒ€μž„ μ‹œ λ³΄μ•ˆ 유좜의 원인이 λ˜κΈ°λ„ ν•œλ‹€[12, 15]. - **`satisfies` μ—°μ‚°μžλ₯Ό ν†΅ν•œ λ°©λΉ„**: `as` ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•œ νƒ€μž… μΊμŠ€νŒ…([[Type Casting|Type Casting]])은 κ³Όμž‰ 속성 체크λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•Šμ•„ 잠재적인 μ—λŸ¬λ₯Ό μœ λ°œν•  수 μžˆλ‹€[16]. 이 같은 취약점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ TypeScript 4.9에 λ„μž…λœ `satisfies` μ—°μ‚°μžλŠ” 객체가 νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ‚˜ νƒ€μž…μ„ λ§Œμ‘±ν•˜λŠ”μ§€ μ—„κ²©νžˆ κ²€μ‚¬ν•˜μ—¬ κ³Όμž‰ μ†μ„±μ˜ μœ μž…μ„ 컴파일 λ‹¨κ³„μ—μ„œ μ°¨λ‹¨ν•œλ‹€[17, 18]. λ”λΆˆμ–΄ 객체의 ꡬ체적인 κ°’(λ¦¬ν„°λŸ΄ νƒ€μž… λ“±)을 μœ μ§€ν•΄ μ •λ°€ν•œ νƒ€μž… μΆ”λ‘ κ³Ό νƒ€μž… 쒁히기(Narrowing)λ₯Ό λ•λŠ” ν˜μ‹ μ μΈ μˆ˜λΉ„ μ „λž΅μœΌλ‘œ ν™œμš©λœλ‹€[18-20]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** ꡬ쑰적 타이핑 (Structural Typing), [[satisfies α„‹α…§α†«α„‰α…‘α†«α„Œα…‘|satisfies μ—°μ‚°μž]], νƒ€μž… μΊμŠ€νŒ… (Type Casting), [[약ᄒᅑᆫ ᄐᅑ압 α„α…‘α†·α„Œα…΅ (Weak Type Detection)|μ•½ν•œ νƒ€μž… 탐지 (Weak Type Detection]] - **Projects/Contexts:** μ² λ²½ μˆ˜λΉ„λŒ€" - TypeScript νƒ€μž… μ‹œμŠ€ν…œ (μΈν„°νŽ˜μ΄μŠ€ 섀계), [[React ᄏα…₯α†·α„‘α…©α„‚α…₯ᆫ트 Props α„€α…₯α†·α„Œα…³α†Ό|React μ»΄ν¬λ„ŒνŠΈ Props 검증]] - **Contradictions/Notes:** 객체 λ¦¬ν„°λŸ΄μ„ 직접 ν• λ‹Ήν•  λ•ŒλŠ” κ³Όμž‰ 속성 체크가 λ°œλ™λ˜μ–΄ μ—λŸ¬λ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ, 쀑간 λ³€μˆ˜λ₯Ό 톡해 κ°„μ ‘ 할당될 λ•ŒλŠ” ꡬ쑰적 타이핑 원칙이 μ μš©λ˜μ–΄ κ³Όμž‰ 속성이 μ‘΄μž¬ν•΄λ„ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” λͺ¨μˆœμ  λ™μž‘μ„ 보인닀[1, 3, 5, 12]. λ˜ν•œ `as` μ—°μ‚°μžλŠ” κ³Όμž‰ 속성을 λ¬΄μ‹œν•˜κ³  할당을 ν—ˆμš©ν•˜μ§€λ§Œ, `satisfies` μ—°μ‚°μžλŠ” 초과된 속성에 λŒ€ν•΄ μ—„κ²©ν•œ 검증을 κ°•μ œν•œλ‹€[16, 21]. --- *Last updated: 2026-04-18* ---