--- id: P-REINFORCE-AUTO-66BE32 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - ꡬ쑰적 타이핑 (Structural Typing)" --- # [[ꡬ쑰적 타이핑 (Structural Typing)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **ꡬ쑰적 νƒ€μ΄ν•‘μ˜ μž‘λ™ 원리와 집합둠적 μ ‘κ·Ό** TypeScript의 ꡬ쑰적 타이핑은 μžλ°”(Java)λ‚˜ C#κ³Ό 같은 μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ…λͺ©μ  타이핑(Nominal Typing)κ³Ό κΆ€λ₯Ό λ‹¬λ¦¬ν•œλ‹€ [2]. λͺ…λͺ©μ  타이핑이 νŠΉμ •ν•œ 신뢄증(νƒ€μž… 이름)을 μš”κ΅¬ν•œλ‹€λ©΄, ꡬ쑰적 타이핑은 μ—΄μ‡ μ˜ λͺ¨μ–‘(객체의 ꡬ쑰)만 맞으면 μžλ¬Όμ‡ λ₯Ό μ—΄ 수 있게 ν•΄μ€€λ‹€ [5]. ν• λ‹Ήν•˜κ³ μž ν•˜λŠ” 값이 νƒ€κ²Ÿ νƒ€μž…μ΄ κ°€μ§„ ν”„λ‘œνΌν‹°λ₯Ό μ΅œμ†Œν•œμœΌλ‘œ λͺ¨λ‘ ν¬ν•¨ν•˜κ³  μžˆλ‹€λ©΄, ꡬ쑰적으둜 ν˜Έν™˜λ˜λŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜μ—¬ 할당을 ν—ˆμš©ν•œλ‹€ [3]. μ΄λŠ” μ§‘ν•©λ‘ μ˜ κ΄€μ μ—μ„œ, 더 ꡬ체적인 ꡬ쑰λ₯Ό κ°€μ§„ νƒ€μž…μ΄ 더 일반적인 νƒ€μž…μ˜ λΆ€λΆ„μ§‘ν•©μœΌλ‘œ μ·¨κΈ‰λ˜μ–΄ ν• λ‹Ή κ°€λŠ₯ν•œ κ΄€κ³„λ‘œ ν‰κ°€λ˜λŠ” 것과 κ°™λ‹€ [5]. * **ν΄λž˜μŠ€μ™€μ˜ ν˜Έν™˜μ„± κ·œμΉ™** μ΄λŸ¬ν•œ ꡬ쑰적 νŠΉμ„±μ€ ν΄λž˜μŠ€μ—λ„ λ™μΌν•˜κ²Œ μ μš©λœλ‹€. 두 개의 λ‹€λ₯Έ νƒ€μž…μ΄ μ–΄λ””μ„œ μœ λž˜ν–ˆλ“  상관없이 λͺ¨λ“  λ©€λ²„μ˜ νƒ€μž…μ΄ ν˜Έν™˜λœλ‹€λ©΄, ν•΄λ‹Ή νƒ€μž…λ“€μ€ ν˜Έν™˜λ˜λŠ” κ²ƒμœΌλ‘œ μ·¨κΈ‰λœλ‹€ [7]. λ‹€λ§Œ μ˜ˆμ™Έμ μœΌλ‘œ `private`μ΄λ‚˜ `protected` 멀버가 ν¬ν•¨λœ 경우, 두 νƒ€μž…μ΄ ν˜Έν™˜λ˜λ €λ©΄ ν•΄λ‹Ή μ ‘κ·Ό μ œμ–΄μž 멀버듀이 λ°˜λ“œμ‹œ λ™μΌν•œ μ„ μ–Έμ—μ„œ κΈ°μ›ν•œ 것이어야 ν•œλ‹€ [7]. * **ꡬ쑰적 νƒ€μ΄ν•‘μ˜ 취약점과 ν•œκ³„** 1. **μ˜λ„ν•˜μ§€ μ•Šμ€ 데이터 μœ μž…:** ꡬ쑰적 타이핑은 μš”κ΅¬λ˜λŠ” μ†μ„±λ§Œ 있으면 κ·Έ μ™Έμ˜ 초과 속성(Excess Properties)이 μ‘΄μž¬ν•˜λ”λΌλ„ 이λ₯Ό ꡬ쑰적으둜 ν˜Έν™˜λœλ‹€κ³  νŒλ‹¨ν•œλ‹€ [4, 5]. 이둜 인해 κ°œλ°œμžκ°€ μ˜€νƒ€λ₯Ό λ‚΄κ±°λ‚˜ 잘λͺ»λœ 속성 이름을 μ „λ‹¬ν–ˆμ„ λ•Œ λŸ°νƒ€μž„μ˜ 예기치 μ•Šμ€ λ™μž‘μ΄λ‚˜ 버그가 λ°œμƒν•  수 μžˆλ‹€ [4]. 2. **κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession):** 이메일 μ£Όμ†Œμ™€ μ‚¬μš©μžμ˜ 이름은 의미둠적으둜 μ™„μ „νžˆ λ‹€λ₯΄μ§€λ§Œ, TypeScript의 ꡬ쑰적 타이핑 ν•˜μ—μ„œλŠ” λ‘˜ λ‹€ λ™μΌν•œ `string` ꡬ쑰λ₯Ό κ°€μ§€λ―€λ‘œ 이λ₯Ό ꡬ뢄해 λ‚΄μ§€ λͺ»ν•œλ‹€ [6, 8]. * **취약점을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•œ μˆ˜λΉ„μ  μž₯치** ꡬ쑰적 타이핑이 μ•ΌκΈ°ν•  수 μžˆλŠ” λ³΄μ•ˆμ  ν—ˆμ μ„ λ°©μ–΄ν•˜κΈ° μœ„ν•΄ TypeScriptλŠ” 좔가적인 λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€. 객체 λ¦¬ν„°λŸ΄μ΄ 직접 ν• λ‹Ήλ˜κ±°λ‚˜ 인수둜 전달될 λ•ŒλŠ” ꡬ쑰적 ν˜Έν™˜μ„±μ„ λ„˜μ–΄ 'κ³Όμž‰ 속성 체크(Excess Property Checking)'λ₯Ό μˆ˜ν–‰ν•˜μ—¬ μ •μ˜λ˜μ§€ μ•Šμ€ 속성을 μ—„κ²©ν•˜κ²Œ μ°¨λ‹¨ν•œλ‹€ [1, 5]. λ˜ν•œ, 의미둠적으둜 λ‹€λ₯Έ 동일 ꡬ쑰의 데이터λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ κ³ μœ ν•œ ν‘œμ‹μ„ λΆ€μ—¬ν•˜λŠ” 'λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)' νŒ¨ν„΄μ„ λ„μž…ν•˜μ—¬ 데이터 μ˜€μ—Όμ„ μ›μ²œμ μœΌλ‘œ 막을 수 μžˆλ‹€ [6, 9]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[λͺ…λͺ©μ  타이핑 (Nominal Typing)]], [[덕 타이핑 (Duck Typing)]], [[κ³Όμž‰ 속성 체크 (Excess Property Checking)]], [[λΈŒλžœλ””λ“œ νƒ€μž… (Branded Types)]] - **Projects/Contexts:** [[TypeScript μΈν„°νŽ˜μ΄μŠ€ 및 μ‹œμŠ€ν…œ 보호 μ•„ν‚€ν…μ²˜ 섀계]] - **Contradictions/Notes:** TypeScriptλŠ” 기본적으둜 ꡬ쑰적 타이핑을 λ”°λ₯΄μ§€λ§Œ, 객체 λ¦¬ν„°λŸ΄μ„ 직접 ν• λ‹Ήν•  λ•Œμ— ν•œν•΄μ„œλŠ” μž‰μ—¬ 속성을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ—„κ²©ν•œ "κ³Όμž‰ 속성 체크(Excess Property Checking)"λ₯Ό μˆ˜ν–‰ν•˜μ—¬ μœ μ—°μ„±κ³Ό μ•ˆμ „μ„±μ˜ κ· ν˜•μ„ λ§žμΆ˜λ‹€ [1, 5, 10]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/ꡬ쑰적 타이핑 (Structural Typing).md]] ---