--- id: P-REINFORCE-AUTO-13C5F5 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - κ³Όμž‰ 속성 체크(EPC)" --- # [[κ³Όμž‰ 속성 체크(EPC)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > κ³Όμž‰ 속성 체크(EPC, Excess Property Checking)λŠ” 객체 λ¦¬ν„°λŸ΄μ„ λ³€μˆ˜μ— 직접 ν• λ‹Ήν•˜κ±°λ‚˜ ν•¨μˆ˜μ˜ 인수둜 전달할 λ•Œ, μ˜ˆμƒμΉ˜ λͺ»ν•œ(μ •μ˜λ˜μ§€ μ•Šμ€) 속성이 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ κ°μ§€ν•˜μ—¬ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” TypeScript의 검사 κΈ°λŠ₯μž…λ‹ˆλ‹€ [1], [2], [3]. μ΄λŠ” 속성λͺ…μ˜ μ˜€νƒ€μ™€ 같은 개발자의 μ‹€μˆ˜λ₯Ό 컴파일 μ‹œμ μ— λ°©μ§€ν•˜μ—¬ μ˜λ„μΉ˜ μ•Šμ€ λŸ°νƒ€μž„ 버그λ₯Ό μ˜ˆλ°©ν•˜λŠ” 데 λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€ [4], [5], [6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ 원리 및 λ°œλ™ 쑰건** TypeScriptλŠ” 기본적으둜 객체의 μ‹€μ œ ν˜•νƒœκ°€ μΌμΉ˜ν•˜λ©΄ ν˜Έν™˜μ„±μ„ μΈμ •ν•˜λŠ” ꡬ쑰적 타이핑(Structural Typing)을 λ”°λ¦…λ‹ˆλ‹€ [7]. κ·ΈλŸ¬λ‚˜ 객체 λ¦¬ν„°λŸ΄μ˜ κ²½μš°μ—λŠ” νŠΉλ³„ν•˜κ²Œ μ·¨κΈ‰λ˜μ–΄, λ‹€λ₯Έ λ³€μˆ˜μ— 직접 ν• λ‹Ήλ˜κ±°λ‚˜ 인수둜 전달될 λ•Œ κ³Όμž‰ 속성 체크(EPC)κ°€ ν™œμ„±ν™”λ©λ‹ˆλ‹€ [1], [3], [8]. μ΄λ•Œ 객체 λ¦¬ν„°λŸ΄ 내에 λŒ€μƒ νƒ€μž…μ— μ •μ˜λ˜μ§€ μ•Šμ€ 초과 속성이 μ‘΄μž¬ν•˜λ©΄ TypeScriptλŠ” 객체 λ¦¬ν„°λŸ΄μ΄ μ•Œλ €μ§„ μ†μ„±λ§Œ μ§€μ •ν•  수 μžˆλ‹€λ©° 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ [9], [8]. * **섀계 λͺ©μ ** 이 κΈ°λŠ₯은 주둜 잘λͺ»λœ 속성 이름을 μž…λ ₯ν•˜λŠ” 였λ₯˜(예: `color`λ₯Ό `colour`둜 잘λͺ» μž…λ ₯ν•˜λŠ” 경우)λ‘œλΆ€ν„° μ‹œμŠ€ν…œμ„ λ³΄ν˜Έν•˜κΈ° μœ„ν•΄ μ‘΄μž¬ν•©λ‹ˆλ‹€ [4], [5]. TypeScriptλŠ” κ°œλ°œμžκ°€ λ³€μˆ˜μ— 객체 λ¦¬ν„°λŸ΄μ„ 직접 λ„˜κΈ°λŠ” μƒν™©μ—μ„œλŠ” μž‰μ—¬ 속성을 전달할 μ˜λ„κ°€ 없을 ν™•λ₯ μ΄ λ†’λ‹€κ³  νŒλ‹¨ν•˜μ—¬ 보닀 μ—„κ²©ν•œ μž£λŒ€λ₯Ό μ μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [5]. * **EPC의 ν•œκ³„μ™€ 우회(Bypass) 문제** EPCλŠ” 객체 λ¦¬ν„°λŸ΄μ„ 직접 λ‹€λ£° λ•Œλ§Œ ν™œμ„±ν™”λœλ‹€λŠ” 취약점이 μžˆμŠ΅λ‹ˆλ‹€ [10]. 객체 λ¦¬ν„°λŸ΄μ„ λ¨Όμ € 쀑간 λ³€μˆ˜μ— ν• λ‹Ήν•œ λ’€ 이λ₯Ό λ‹€λ₯Έ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜λ‚˜ λ³€μˆ˜μ— ν• λ‹Ήν•˜κ²Œ 되면, μ΅œμ†Œ μš”κ±΄λ§Œ μΆ©μ‘±ν•˜λ©΄ ν†΅κ³Όμ‹œν‚€λŠ” ꡬ쑰적 타이핑 μ›μΉ™μœΌλ‘œ λŒμ•„κ°€ κ³Όμž‰ 속성 체크가 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [1], [4], [11], [10]. μ΄λŸ¬ν•œ κ°„μ ‘ 할당을 ν†΅ν•œ 우회 ν˜„μƒμ€ λΆˆν•„μš”ν•œ 속성을 DOM에 μ „λ‹¬ν•˜κ±°λ‚˜ 예기치 μ•Šμ€ μ»΄ν¬λ„ŒνŠΈ λ¦¬λ Œλ”λ§ 및 λ³΄μ•ˆ 유좜과 같은 λŸ°νƒ€μž„ 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [12], [10]. * **보완 μ „λž΅ 및 `satisfies` μ—°μ‚°μž** EPC의 우회 문제λ₯Ό λ°©μ–΄ν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλŠ” μ œλ„€λ¦­κ³Ό `never` νƒ€μž…μ„ ν™œμš©ν•˜μ—¬ 초과 속성이 λ“€μ–΄μ˜¬ 경우 컴파일이 μ‹€νŒ¨ν•˜λ„λ‘ μˆ˜λ™μœΌλ‘œ κ°μ§€ν•˜λŠ” μž¬κ·€μ  νƒ€μž…μ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€ [13], [14]. 더 근본적인 ν•΄κ²°μ±…μœΌλ‘œλŠ” TypeScript 4.9에 λ„μž…λœ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [15]. `satisfies` μ—°μ‚°μžλŠ” 객체의 ꡬ체적인 νƒ€μž…(예: λ¦¬ν„°λŸ΄ κ°’ λ“±)을 μžƒμ§€ μ•ŠμœΌλ©΄μ„œλ„ λŒ€μƒ μΈν„°νŽ˜μ΄μŠ€μ˜ μš”κ΅¬μ‚¬ν•­μ„ μ—„κ²©νžˆ κ²€μ‚¬ν•˜κΈ° λ•Œλ¬Έμ—, κ°„μ ‘ ν• λ‹Ή κ³Όμ •μ—μ„œλ„ κ³Όμž‰ 속성을 μ°¨λ‹¨ν•˜λŠ” κ°•λ ₯ν•œ μˆ˜λΉ„ μ „λž΅μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [16], [15]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[ꡬ쑰적 타이핑(Structural Typing)]], [[satisfies μ—°μ‚°μž]], [[객체 λ¦¬ν„°λŸ΄(Object Literals)]] - **Projects/Contexts:** [[TypeScript νƒ€μž… 검사 μ‹œμŠ€ν…œ]], [[React μ»΄ν¬λ„ŒνŠΈ Props 검사]] - **Contradictions/Notes:** κ³Όμž‰ 속성이 μ‹€μ œ 버그λ₯Ό μœ λ°œν•˜λŠ” λΉˆλ„μ— λŒ€ν•΄μ„œλŠ” μ‹œκ°μ°¨κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. μΌλΆ€λŠ” 초과 속성이 λŸ°νƒ€μž„ 이슈(λ¦¬λ Œλ”λ§, λ³΄μ•ˆ 문제)λ₯Ό μ•ΌκΈ°ν•œλ‹€κ³  κ²½κ³ ν•˜μ§€λ§Œ [12], [10], TypeScript-eslint μ €μž₯μ†Œμ˜ 일뢀 λ…Όμ˜μ—μ„œλŠ” 객체의 ν‚€λ‚˜ κ°’ μ„ΈνŠΈμ— λŒ€ν•œ 직접적인 연산이 μ—†λŠ” ν•œ κ³Όμž‰ 속성 μžμ²΄κ°€ μ‹€μ œλ‘œ 버그λ₯Ό μœ λ°œν•˜λŠ” κ²½μš°λŠ” λ“œλ¬Όλ‹€κ³  μ£Όμž₯ν•©λ‹ˆλ‹€ [17]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/κ³Όμž‰ 속성 체크(EPC).md]] ---