--- id: P-REINFORCE-AUTO-25EFF5 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) > ꡬ쑰적 타이핑은 TypeScript νƒ€μž… μ‹œμŠ€ν…œμ˜ 근본적인 μ›μΉ™μœΌλ‘œ, νƒ€μž…μ˜ μ΄λ¦„μ΄λ‚˜ λͺ…μ‹œμ  선언이 μ•„λ‹Œ 객체의 μ‹€μ œ ν˜•νƒœ(ꡬ쑰)에 κΈ°λ°˜ν•˜μ—¬ νƒ€μž… ν˜Έν™˜μ„±μ„ κ²°μ •ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. μ΄λŠ” "λ§Œμ•½ μ–΄λ–€ 것이 였리처럼 κ±·κ³  갉갉거리면 그것은 μ˜€λ¦¬λ‹€"λΌλŠ” '덕 타이핑(Duck Typing)' κ°œλ…μœΌλ‘œλ„ 뢈리며, λŒ€μƒ νƒ€μž…μ΄ μš”κ΅¬ν•˜λŠ” μ΅œμ†Œν•œμ˜ 속성과 λ©”μ„œλ“œλ₯Ό κ°–μΆ”κ³  μžˆλ‹€λ©΄ μž‰μ—¬ 속성이 μžˆλ”λΌλ„ ν˜Έν™˜λ˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€ [1-3]. 이 μ‹œμŠ€ν…œμ€ μœ μ—°μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ, 의미둠적 ꡬ뢄이 ν•„μš”ν•œ μƒν™©μ—μ„œλŠ” ν•œκ³„λ₯Ό 보일 수 μžˆμ–΄ 이λ₯Ό λ³΄μ™„ν•˜λŠ” λ‹€μ–‘ν•œ 기법듀이 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€ [4-6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **νƒ€μž… ν˜Έν™˜μ„±μ˜ κΈ°λ³Έ κ·œμΉ™:** ꡬ쑰적 타이핑 ν•˜μ—μ„œ ν•œ νƒ€μž…(`y`)이 λ‹€λ₯Έ νƒ€μž…(`x`)κ³Ό ν˜Έν™˜λ˜λ €λ©΄ `y`κ°€ μ΅œμ†Œν•œ `x`κ°€ κ°€μ§„ λͺ¨λ“  멀버λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€ [1]. λ³€μˆ˜ ν• λ‹Ή μ‹œ, μš°λ³€μ˜ 값이 νƒ€κ²Ÿ νƒ€μž…μ˜ 속성을 λͺ¨λ‘ μΆ©μ‘±ν•˜κΈ°λ§Œ ν•œλ‹€λ©΄ λ‹€λ₯Έ μž‰μ—¬ 속성을 κ°€μ§€κ³  μžˆλ”λΌλ„ ꡬ쑰적으둜 ν˜Έν™˜λ˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ–΄ 할당이 ν—ˆμš©λ©λ‹ˆλ‹€ [1]. * **λͺ…λͺ©μ  타이핑(Nominal Typing)과의 차이:** Javaλ‚˜ C#κ³Ό 같은 전톡적인 객체 μ§€ν–₯ μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ…λͺ©μ  타이핑은 νƒ€μž…μ˜ μ΄λ¦„μ΄λ‚˜ λͺ…μ‹œμ  상속/κ΅¬ν˜„ 선언이 μΌμΉ˜ν•΄μ•Όλ§Œ ν˜Έν™˜μ„±μ΄ μΈμ •λ©λ‹ˆλ‹€ [2, 7]. 반면, TypeScriptλŠ” 객체의 ꡬ쑰(속성과 λ©”μ„œλ“œμ˜ ν˜•νƒœ)만 μΌμΉ˜ν•˜λ©΄ λ™μΌν•œ νƒ€μž… ν˜Ήμ€ ν˜Έν™˜ κ°€λŠ₯ν•œ νƒ€μž…μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” μœ μ—°μ„±μ„ κ°–μŠ΅λ‹ˆλ‹€ [2]. * **κ³Όμž‰ 속성 체크(Excess Property Checking)λ₯Ό ν†΅ν•œ λ°©μ–΄:** ꡬ쑰적 νƒ€μ΄ν•‘μ˜ μœ μ—°ν•¨μ€ μ˜€νƒ€(예: `color` λŒ€μ‹  `colour` μž…λ ₯)λ₯Ό λ‚΄κ±°λ‚˜ μ˜λ„μΉ˜ μ•Šμ€ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” μ‹€μˆ˜λ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 9]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ TypeScriptλŠ” 객체 λ¦¬ν„°λŸ΄μ΄ λ³€μˆ˜μ— 직접 ν• λ‹Ήλ˜κ±°λ‚˜ ν•¨μˆ˜μ˜ 인자둜 전달될 λ•Œ μ˜ˆμ™Έμ μœΌλ‘œ μ—„κ²©ν•˜κ²Œ λ™μž‘ν•˜λŠ” 'κ³Όμž‰ 속성 체크'λ₯Ό λ°œλ™μ‹œν‚΅λ‹ˆλ‹€ [3, 10, 11]. 이λ₯Ό 톡해 νƒ€κ²Ÿ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λ˜μ§€ μ•Šμ€ μž‰μ—¬ 속성이 ν¬ν•¨λ˜λŠ” 것을 컴파일 μ‹œμ μ— μ°¨λ‹¨ν•©λ‹ˆλ‹€ [3, 10]. * **ꡬ쑰적 νƒ€μ΄ν•‘μ˜ ν•œκ³„μ™€ λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types):** ꡬ쑰적 타이핑은 속성 ꡬ쑰가 λ™μΌν•˜λ©΄ νƒ€μž…μ΄ κ°™λ‹€κ³  κ°„μ£Όν•˜κΈ° λ•Œλ¬Έμ—, λ™μΌν•œ ꡬ쑰λ₯Ό κ°€μ‘Œμ§€λ§Œ μ˜λ―Έκ°€ μ „ν˜€ λ‹€λ₯Έ 데이터(예: IP와 URL, 일반 λ¬Έμžμ—΄κ³Ό λ³΄μ•ˆ 처리된 λ¬Έμžμ—΄, 각기 λ‹€λ₯Έ 톡화 λ“±)λ₯Ό κ΅¬λ³„ν•˜μ§€ λͺ»ν•˜λŠ” 문제λ₯Ό μ•ΌκΈ°ν•©λ‹ˆλ‹€ [4-6, 12-14]. 이λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄, λŸ°νƒ€μž„μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ 컴파일 μ‹œμ μ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ³ μœ ν•œ κ°€μƒμ˜ 속성(λΈŒλžœλ“œ)을 νƒ€μž…μ— λΆ€μ—¬ν•˜μ—¬ λͺ…λͺ©μ  타이핑과 μœ μ‚¬ν•œ κ°•λ ₯ν•œ 격리λ₯Ό μ œκ³΅ν•˜λŠ” λΈŒλžœλ””λ“œ νƒ€μž…(λ˜λŠ” Opaque Types) 기법이 μ‚¬μš©λ©λ‹ˆλ‹€ [6, 14-16]. * **`satisfies` μ—°μ‚°μžμ˜ ν™œμš©:** ν• λ‹Ή μ‹œ 쀑간 λ³€μˆ˜λ₯Ό 거치면 κ³Όμž‰ 속성 체크가 μš°νšŒλ˜λŠ” ꡬ쑰적 νƒ€μ΄ν•‘μ˜ 취약점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [17-19]. 이 μ—°μ‚°μžλŠ” 객체가 νŠΉμ • ꡬ쑰λ₯Ό λ§Œμ‘±ν•˜λŠ”μ§€ μ—„κ²©ν•˜κ²Œ 검사(κ³Όμž‰ 속성 λ°©μ§€)ν•˜λ©΄μ„œλ„, ν• λ‹Ήλœ 객체 μ†μ„±μ˜ ꡬ체적인 λ¦¬ν„°λŸ΄ νƒ€μž…κ³Ό μž‰μ—¬ 속성 정보λ₯Ό κ·ΈλŒ€λ‘œ μœ μ§€ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€ [19-21]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[덕 타이핑(Duck Typing)]], [[λͺ…λͺ©μ  타이핑(Nominal Typing)]], [[κ³Όμž‰ 속성 체크(Excess Property Checking)]], [[λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)]], [[satisfies μ—°μ‚°μž]] - **Projects/Contexts:** [[TypeScript νƒ€μž… μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 도메인 기반 섀계(DDD)]] - **Contradictions/Notes:** 객체 λ¦¬ν„°λŸ΄μ„ 직접 ν• λ‹Ήν•˜κ±°λ‚˜ 인자둜 λ„˜κΈΈ λ•ŒλŠ” 예기치 μ•Šμ€ μž‰μ—¬ 속성에 λŒ€ν•΄ μ—„κ²©ν•œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” 반면, 값을 미리 λ³€μˆ˜μ— μ„ μ–Έν•œ λ’€ κ°„μ ‘μ μœΌλ‘œ ν• λ‹Ήν•  λ•ŒλŠ” μ΅œμ†Œ μš”κ±΄λ§Œ μΆ©μ‘±ν•˜λ©΄ μž‰μ—¬ 속성을 λ¬΄μ‹œν•˜κ³  할당을 ν—ˆμš©ν•˜λŠ” λ™μž‘ λ°©μ‹μ˜ 차이가 μ‘΄μž¬ν•©λ‹ˆλ‹€ [8, 10, 17, 18]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/ꡬ쑰적 타이핑(Structural Typing).md]] ---