--- id: P-REINFORCE-AUTO-9DE40A category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - TypeScript νƒ€μž… μ‹œμŠ€ν…œ 및 μΈν„°νŽ˜μ΄μŠ€ 섀계" --- # [[TypeScript νƒ€μž… μ‹œμŠ€ν…œ 및 μΈν„°νŽ˜μ΄μŠ€ 섀계]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > TypeScript의 νƒ€μž… μ‹œμŠ€ν…œμ€ 객체의 μ‹€μ œ ν˜•νƒœμ™€ ꡬ쑰λ₯Ό κΈ°μ€€μœΌλ‘œ ν˜Έν™˜μ„±μ„ νŒλ‹¨ν•˜λŠ” ꡬ쑰적 타이핑(Structural Typing)을 κ·Όκ°„μœΌλ‘œ ν•©λ‹ˆλ‹€ [1, 2]. κ°œλ°œμžλŠ” μ‹œμŠ€ν…œ 섀계 μ‹œ μΈν„°νŽ˜μ΄μŠ€μ™€ νƒ€μž… 별칭을 μ „λž΅μ μœΌλ‘œ μ„ νƒν•˜μ—¬ νƒ€μž…μ˜ ν™•μž₯μ„±κ³Ό 컴파일러 μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3-5]. λ˜ν•œ, 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨, λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types), `readonly` 및 `satisfies` μ—°μ‚°μž λ“±μ˜ κ³ κΈ‰ κΈ°λŠ₯을 적극적으둜 ν™œμš©ν•˜μ—¬ λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό λ°©μ§€ν•˜κ³  κ²¬κ³ ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ₯Ό ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€ [6-10]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **ꡬ쑰적 타이핑과 집합둠적 μ ‘κ·Ό** TypeScriptλŠ” Javaλ‚˜ C#κ³Ό 같은 λͺ…λͺ©μ  타이핑(Nominal Typing)이 μ•„λ‹Œ, 객체의 ꡬ쑰가 μΌμΉ˜ν•˜λ©΄ λ™μΌν•œ νƒ€μž…μœΌλ‘œ κ°„μ£Όν•˜λŠ” 덕 타이핑(Duck Typing)을 μ±„νƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [1, 11]. 집합둠적 κ΄€μ μ—μ„œ νƒ€μž…μ€ 'κ°€λŠ₯ν•œ κ°’λ“€μ˜ μ§‘ν•©'으둜 μ •μ˜λ˜λ©°, `never`λŠ” 곡집합, `unknown`은 λͺ¨λ“  JS 값을 ν¬ν•¨ν•˜λŠ” μ „μ²΄μ§‘ν•©μœΌλ‘œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [12-14]. μ΄λŸ¬ν•œ νŠΉμ„±μ„ 톡해 μƒμ†μ΄λ‚˜ λͺ…μ‹œμ  μ„ μ–Έ 없이도 νƒ€μž… κ°„μ˜ ν˜Έν™˜μ„±μ΄ μœ μ—°ν•˜κ²Œ κ²°μ •λ©λ‹ˆλ‹€ [2, 15]. * **μΈν„°νŽ˜μ΄μŠ€(Interface)와 νƒ€μž…(Type) 섀계 μ „λž΅** μΈν„°νŽ˜μ΄μŠ€λŠ” ν™•μž₯μ„±κ³Ό μ„±λŠ₯ λ©΄μ—μ„œ μœ λ¦¬ν•©λ‹ˆλ‹€. TypeScript μ»΄νŒŒμΌλŸ¬λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ²˜λ¦¬ν•  λ•Œ 이름을 κΈ°μ€€μœΌλ‘œ μΊμ‹±ν•˜λ―€λ‘œ, ꡐ집합(`&`)을 ν™œμš©ν•œ νƒ€μž… 별칭보닀 `interface extends`λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ μ„±λŠ₯ μ΅œμ ν™”μ— 도움이 λ©λ‹ˆλ‹€ [5, 16-18]. κ·ΈλŸ¬λ‚˜ ꡐ집합, μœ λ‹ˆμ˜¨, λ§€ν•‘λœ νƒ€μž… λ“± λ³΅μž‘ν•œ νƒ€μž… ꡬ성이 ν•„μš”ν•  λ•ŒλŠ” νƒ€μž… 별칭을 ν™œμš©ν•΄μ•Ό ν•˜λ©°, μ™ΈλΆ€ ν™•μž₯ 포인트λ₯Ό μ œν•œν•˜κΈ° μœ„ν•΄ μ˜λ„μ μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€ λŒ€μ‹  νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°λ„ μ‘΄μž¬ν•©λ‹ˆλ‹€ [19, 20]. * **κ³Όμž‰ 속성 체크(EPC)와 `satisfies` μ—°μ‚°μž** 객체 λ¦¬ν„°λŸ΄μ΄ νƒ€μž…μ΄ μ§€μ •λœ λ³€μˆ˜μ— 직접 할당될 λ•Œ, TypeScriptλŠ” 초과 속성이 λ“€μ–΄μ˜€λŠ” 것을 λ°©μ–΄ν•˜κΈ° μœ„ν•΄ κ³Όμž‰ 속성 체크λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€ [2, 21-24]. ν•˜μ§€λ§Œ κ°„μ ‘ ν• λ‹Ή κ³Όμ •μ—μ„œλŠ” 이 μˆ˜λΉ„ κΈ°μ œκ°€ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆλŠ”λ°, 이λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10, 21, 25]. `satisfies`λŠ” 객체가 νŠΉμ • νƒ€μž…μ˜ ν˜•νƒœλ₯Ό μΆ©μ‘±ν•˜λŠ”μ§€ κ²€μ‚¬ν•˜λ©΄μ„œλ„ ꡬ체적인 λ¦¬ν„°λŸ΄ νƒ€μž…μ˜ 정보λ₯Ό μžƒμ§€ μ•Šκ²Œ ν•˜μ—¬ νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€ [10, 26-28]. * **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)κ³Ό μ™„μ „μ„± 검사** λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ μƒνƒœλ₯Ό 섀계할 λ•ŒλŠ” 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨μ΄ 핡심적인 역할을 ν•©λ‹ˆλ‹€. κ³΅ν†΅λœ λ¦¬ν„°λŸ΄ 속성(예: `kind`, `type`)을 νƒœκ·Έλ‘œ μ‚¬μš©ν•˜μ—¬ ν•©μ§‘ν•© λ‚΄μ˜ νƒ€μž…μ„ μ’ν˜€(Narrowing) μ•ˆμ „ν•˜κ²Œ λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€ [6, 29-31]. 특히 `never` νƒ€μž…μ„ ν™œμš©ν•œ μ™„μ „μ„± 검사(Exhaustiveness Checking)λ₯Ό κ΅¬ν˜„ν•˜λ©΄, μ²˜λ¦¬λ˜μ§€ μ•Šμ€ λˆ„λ½λœ μƒνƒœκ°€ μžˆμ„ 경우 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ λΉˆν‹ˆμ—†λŠ” μˆ˜λΉ„ 체계λ₯Ό κ°–μΆœ 수 μžˆμŠ΅λ‹ˆλ‹€ [31, 32]. * **λΆˆλ³€μ„±κ³Ό λΈŒλžœλ””λ“œ νƒ€μž…(Branded Types)을 ν†΅ν•œ 데이터 μ˜€μ—Ό λ°©μ§€** `readonly` μˆ˜μ‹μ–΄λŠ” κ°μ²΄λ‚˜ 배열이 λŸ°νƒ€μž„ μ„±λŠ₯ μ €ν•˜ 없이 컴파일 μ‹œμ μ— λΆˆλ³€μ„±μ„ μœ μ§€ν•˜λ„λ‘ 보μž₯ν•˜μ—¬ μ˜λ„μΉ˜ μ•Šμ€ μƒνƒœ 변경을 μ°¨λ‹¨ν•©λ‹ˆλ‹€ [8, 33-35]. λ˜ν•œ, ꡬ쑰적 νƒ€μ΄ν•‘μ˜ ν•œκ³„μΈ "κΈ°λ³Έ νƒ€μž…μ—μ˜ μ§‘μ°©(Primitive Obsession)"을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ³ μœ ν•œ ν‘œμ‹(`__brand`)을 λΆ€μ—¬ν•˜λŠ” λΈŒλžœλ””λ“œ νƒ€μž… 기법을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 9, 36, 37]. μ΄λŠ” ID와 일반 λ¬Έμžμ—΄μ΄ ν˜Όμš©λ˜λŠ” 것을 컴파일러 μˆ˜μ€€μ—μ„œ κ°•λ ₯히 μ°¨λ‹¨ν•©λ‹ˆλ‹€ [9, 37, 38]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[ꡬ쑰적 타이핑 (Structural Typing)]], [[식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨ (Discriminated Unions)]], [[Branded Types]], [[satisfies μ—°μ‚°μž]] - **Projects/Contexts:** [[도메인 기반 섀계 (DDD)]], [[SOLID 원칙 및 μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (ISP)]] - **Contradictions/Notes:** TypeScript 곡식 λ¬Έμ„œμ™€ μ„±λŠ₯ κ°€μ΄λ“œλŠ” 컴파일 μ΅œμ ν™”λ₯Ό μœ„ν•΄ 상속 μ‹œ `interface extends`λ₯Ό ꢌμž₯ν•©λ‹ˆλ‹€[16-18]. ν•˜μ§€λ§Œ 일뢀 개발 νŒ€λ“€μ€ μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ 병합(Declaration Merging)으둜 μΈν•œ 예기치 μ•Šμ€ λΆ€μž‘μš©μ„ μ›μ²œ μ°¨λ‹¨ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  객체 μ •μ˜μ— λŒ€ν•΄ `Type` 별칭(alias)만 μ‚¬μš©ν•˜λ„λ‘ κ·œμΉ™μ„ κ°•μ œν•˜κΈ°λ„ ν•©λ‹ˆλ‹€[19, 39, 40]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/TypeScript νƒ€μž… μ‹œμŠ€ν…œ 및 μΈν„°νŽ˜μ΄μŠ€ 섀계.md]] ---