--- id: P-REINFORCE-AUTO-129F01 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - λͺ…λͺ©μ  타이핑 (Nominal Typing)" --- # [[λͺ…λͺ©μ  타이핑 (Nominal Typing)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > λͺ…λͺ©μ  타이핑(Nominal Typing)은 객체의 μ‹€μ œ ν˜•νƒœλ‚˜ ꡬ쑰와 상관없이 νƒ€μž…μ˜ μ΄λ¦„μ΄λ‚˜ λͺ…μ‹œμ  선언이 μΌμΉ˜ν•΄μ•Όλ§Œ ν˜Έν™˜μ„±μ„ μΈμ •ν•˜λŠ” νƒ€μž… μ‹œμŠ€ν…œ 방식이닀 [1, 2]. TypeScriptλŠ” 기본적으둜 ꡬ쑰적 타이핑을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λͺ…λͺ©μ  타이핑을 λ‚΄μž₯ κΈ°λŠ₯으둜 μ§€μ›ν•˜μ§€ μ•Šμ§€λ§Œ, Javaλ‚˜ C# 같은 전톡적인 객체 μ§€ν–₯ μ–Έμ–΄μ—μ„œλŠ” κΈ°λ³Έ λ°©μ‹μœΌλ‘œ μ‚¬μš©λœλ‹€ [1-3]. TypeScript ν™˜κ²½μ—μ„œλŠ” 의미적으둜 λ‹€λ₯Έ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ 'λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)' νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ 효과λ₯Ό 흉내 λ‚Έλ‹€ [3-5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ μ •μ˜μ™€ λ™μž‘ 방식** λͺ…λͺ©μ  타이핑 μ²΄κ³„μ—μ„œλŠ” νƒ€μž…μ˜ 이름이 μΌμΉ˜ν•΄μ•Όλ§Œ λ°μ΄ν„°μ˜ ν˜Έν™˜μ„±μ΄ μ„±λ¦½ν•œλ‹€ [1]. μ΄λŠ” "νŠΉμ • 신뢄증이 μžˆμ–΄μ•Όλ§Œ 문을 톡과할 수 μžˆλŠ”" 방식에 λΉ„μœ λ  수 있으며, μ‹€μ œ μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œμ˜ ν˜•νƒœ(ꡬ쑰)κ°€ 같더라도 이름이 λ‹€λ₯΄λ©΄ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•œλ‹€ [2]. * **TypeScriptμ—μ„œμ˜ λΆ€μž¬μ™€ ν•„μš”μ„±** TypeScript와 JavaScriptλŠ” ꡬ별 κ°€λŠ₯ν•œ νƒ€μž… 별칭(distinguishable type aliases)을 μƒμ„±ν•˜λŠ” λ“± λͺ…λͺ©μ  타이핑 맀칭을 μ§μ ‘μ μœΌλ‘œ μ§€μ›ν•˜λŠ” λ‚΄μž₯ λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€ [3, 6]. κ·ΈλŸ¬λ‚˜ μ‹œμŠ€ν…œμ˜ λ³΅μž‘λ„κ°€ 컀질수둝 의미적으둜 λ‹€λ₯Έ 데이터λ₯Ό κ΅¬λΆ„ν•˜μ§€ λͺ»ν•˜λŠ” 'κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)' λ¬Έμ œκ°€ λ°œμƒν•˜λ―€λ‘œ, λŸ°νƒ€μž„ ꡬ쑰가 λ™μΌν•œ 값듀을 νƒ€μž… μ‹œμŠ€ν…œ λ‚΄μ—μ„œ λ‹€λ₯΄κ²Œ μ·¨κΈ‰ν•΄μ•Ό ν•  κ°•λ ₯ν•œ ν•„μš”μ„±μ΄ λŒ€λ‘λœλ‹€ [3, 5]. * **λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)을 ν†΅ν•œ κ΅¬ν˜„** λͺ…λͺ©μ  타이핑을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” TypeScriptμ—μ„œ 이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλ“€μ€ 'λΈŒλžœλ””λ“œ νƒ€μž…' λ˜λŠ” '였패크 νƒ€μž…(Opaque Types)'μ΄λΌλŠ” νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€ [4]. 이 νŒ¨ν„΄μ€ λŸ°νƒ€μž„μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šκ³  컴파일 μ‹œμ μ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ³ μœ ν•œ 속성(λΈŒλžœλ“œ)을 νƒ€μž…μ— μΈμœ„μ μœΌλ‘œ λΆ€μ—¬ν•˜λŠ” 방식이닀 [4, 5]. 이λ₯Ό 톡해 같은 μ›μ‹œ νƒ€μž…(예: `string`)이라도 μ΄λ©”μΌμ΄λ‚˜ μ‚¬μš©μž ID처럼 μ„œλ‘œ λ‹€λ₯Έ 의미λ₯Ό μ§€λ‹Œ 값듀이 μ„œλ‘œ ν˜Όμš©λ˜κ±°λ‚˜ 잘λͺ» ν• λ‹Ήλ˜λŠ” 것을 막고, μ—„κ²©ν•œ λͺ…λͺ©μ  ꡬ뢄을 생성할 수 μžˆλ‹€ [4, 5]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[ꡬ쑰적 타이핑 (Structural Typing)]], [[λΈŒλžœλ””λ“œ νƒ€μž… (Branded Types)]], [[κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°© (Primitive Obsession)]] - **Projects/Contexts:** [[도메인 기반 섀계 (DDD) 및 데이터 μ˜€μ—Ό λ°©μ§€]], [[TypeScript의 μ•ˆμ „ν•œ μΈν„°νŽ˜μ΄μŠ€ 섀계]] - **Contradictions/Notes:** Javaλ‚˜ C#κ³Ό 같은 μ–Έμ–΄λŠ” λͺ…λͺ©μ  타이핑을 κΈ°λ³Έ μ–Έμ–΄ μ°¨μ›μ—μ„œ μ œκ³΅ν•˜μ§€λ§Œ, TypeScriptλŠ” 이λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆμ§€ μ•ŠμœΌλ―€λ‘œ [1-3], λͺ…λͺ©μ  νƒ€μ΄ν•‘μ˜ 이점을 λˆ„λ¦¬κΈ° μœ„ν•΄μ„œλŠ” κ°œλ°œμžκ°€ ꡐ집합 νƒ€μž…(`&`)μ΄λ‚˜ `unique symbol` 등을 ν™œμš©ν•˜μ—¬ μΈμœ„μ μΈ νŒ¨ν„΄(λΈŒλžœλ””λ“œ νƒ€μž…)을 κ΅¬ν˜„ν•΄μ•Όλ§Œ ν•œλ‹€ [7, 8]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/λͺ…λͺ©μ  타이핑 (Nominal Typing).md]] ---