--- id: [[P-Reinforce|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]])" --- # [[แ„€แ…ฎแ„Œแ…ฉแ„Œแ…ฅแ†จ แ„แ…กแ„‹แ…ตแ„‘แ…ตแ†ผ(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|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)|๋• ํƒ€์ดํ•‘(Duck Typing]], ๋ช…๋ชฉ์  ํƒ€์ดํ•‘(Nominal Typing), ๊ณผ์ž‰ ์†์„ฑ ์ฒดํฌ(Excess Property Checking), ๋ธŒ๋žœ๋””๋“œ ํƒ€์ž…(Branded Types), [[satisfies แ„‹แ…งแ†ซแ„‰แ…กแ†ซแ„Œแ…ก|satisfies ์—ฐ์‚ฐ์ž]] - **Projects/Contexts:** TypeScript ํƒ€์ž… ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์„ค๊ณ„(DDD) - **Contradictions/Notes:** ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ง์ ‘ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ธ์ž๋กœ ๋„˜๊ธธ ๋•Œ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ž‰์—ฌ ์†์„ฑ์— ๋Œ€ํ•ด ์—„๊ฒฉํ•œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐ˜๋ฉด, ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณ€์ˆ˜์— ์„ ์–ธํ•œ ๋’ค ๊ฐ„์ ‘์ ์œผ๋กœ ํ• ๋‹นํ•  ๋•Œ๋Š” ์ตœ์†Œ ์š”๊ฑด๋งŒ ์ถฉ์กฑํ•˜๋ฉด ์ž‰์—ฌ ์†์„ฑ์„ ๋ฌด์‹œํ•˜๊ณ  ํ• ๋‹น์„ ํ—ˆ์šฉํ•˜๋Š” ๋™์ž‘ ๋ฐฉ์‹์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [8, 10, 17, 18]. --- *Last updated: 2026-04-18* ---