--- id: P-REINFORCE-AUTO-1F695C category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - μž¬κ·€μ  λΆˆλ³€μ„± (DeepReadonly)" --- # [[μž¬κ·€μ  λΆˆλ³€μ„± (DeepReadonly)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > μž¬κ·€μ  λΆˆλ³€μ„±(DeepReadonly)은 TypeScriptμ—μ„œ μ΅œμƒμœ„ μ†μ„±λΏλ§Œ μ•„λ‹ˆλΌ μ€‘μ²©λœ λ‚΄λΆ€ κ°μ²΄κΉŒμ§€ λͺ¨λ‘ λΆˆλ³€(immutable) μƒνƒœλ‘œ λ§Œλ“œλŠ” μ»€μŠ€ν…€ μœ ν‹Έλ¦¬ν‹° νƒ€μž… κΈ°λ²•μž…λ‹ˆλ‹€ [1-3]. λ‚΄μž₯ `Readonly` νƒ€μž…μ΄λ‚˜ `readonly` μˆ˜μ‹μ–΄κ°€ μ œκ³΅ν•˜λŠ” 얕은(shallow) μˆ˜μ€€μ˜ 보호 ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ§€ν•‘ νƒ€μž…κ³Ό 쑰건뢀 νƒ€μž…μ„ κ²°ν•©ν•˜μ—¬ κ΅¬ν˜„ν•©λ‹ˆλ‹€ [1, 3-5]. 전체 데이터 ꡬ쑰의 변경을 λ°©μ§€ν•˜μ—¬ 트리 κ΅¬μ‘°λ‚˜ λ³΅μž‘ν•œ 쀑첩 데이터λ₯Ό λ‹€λ£¨λŠ” μƒνƒœ 관리 및 μ„€μ • 객체 λ“±μ—μ„œ 데이터 무결성을 보μž₯ν•˜λŠ” κ°•λ ₯ν•œ λ°©μ–΄μ±… 역할을 ν•©λ‹ˆλ‹€ [1, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **얕은 λΆˆλ³€μ„±μ˜ ν•œκ³„:** TypeScript의 λ‚΄μž₯ `Readonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ΄λ‚˜ 기본적인 `readonly` μˆ˜μ‹μ–΄λŠ” 객체의 μ΅œμƒμœ„(top-level) μ†μ„±λ§Œ 읽기 μ „μš©μœΌλ‘œ λ§Œλ“ λ‹€ [1, 2, 5]. 이둜 인해 μ€‘μ²©λœ 객체(nested objects)λ‚˜ λ°°μ—΄μ˜ κΉŠμ€ λ‚΄λΆ€ 속성듀은 μ—¬μ „νžˆ λ³€κ²½ κ°€λŠ₯ν•œ(mutable) μƒνƒœλ‘œ 남아 예기치 μ•Šμ€ 데이터 μ˜€μ—Όμ— μ·¨μ•½ν•΄μ§„λ‹€ [1, 2, 5]. - **DeepReadonly의 λ™μž‘ 원리:** μ΄λŸ¬ν•œ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  λ‚΄λΆ€ 계측을 λ³΄ν˜Έν•  수 μžˆλŠ” `DeepReadonly` μž¬κ·€μ  νƒ€μž…(Recursive Type)을 μ •μ˜ν•œλ‹€ [1, 2]. 이 νƒ€μž…μ€ λ§€ν•‘ νƒ€μž…(Mapped Types)κ³Ό 쑰건뢀 νƒ€μž…(Conditional Types)을 κ²°ν•©ν•˜μ—¬ κ΅¬μ„±ν•˜λ©°, 객체의 ν”„λ‘œνΌν‹°λ₯Ό μˆœνšŒν•˜λ©° μ€‘μ²©λœ λͺ¨λ“  속성에 μž¬κ·€μ μœΌλ‘œ `readonly`λ₯Ό κ°•μ œν•˜μ—¬ 전체 ꡬ쑰λ₯Ό λ™κ²°μ‹œν‚¨λ‹€ [1, 3]. - **κ΅¬ν˜„ 및 라이브러리 μ˜μ‘΄μ„±:** `DeepReadonly`λŠ” ν˜„μž¬ TypeScript 언어에 기본적으둜 λ‚΄μž₯된 μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ΄ μ•„λ‹ˆλ‹€ [6]. λ”°λΌμ„œ μ‹œμŠ€ν…œ 무결성을 μœ„ν•΄ κ°œλ°œμžκ°€ 직접 μž¬κ·€μ  헬퍼 νƒ€μž…μ„ μ •μ˜ν•˜κ±°λ‚˜, `ts-essentials`와 같이 이λ₯Ό μ œκ³΅ν•˜λŠ” μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€ [6]. λ°˜λŒ€λ‘œ λΆˆλ³€μ„±μ„ ν•΄μ œν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” `Mutable` 헬퍼 νƒ€μž…μ„ λ§Œλ“€μ–΄ λͺ¨λ“  μ†μ„±μ˜ `readonly`λ₯Ό μ œκ±°ν•  μˆ˜λ„ μžˆλ‹€ [2, 7]. - **핡심 ν™œμš© 사둀:** 트리 κ΅¬μ‘°λ‚˜ λ³΅μž‘ν•œ 쀑첩 데이터λ₯Ό λ‹€λ£° λ•Œ 단 ν•˜λ‚˜μ˜ 속성도 λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•œλ‹€ [1, 3]. 생성 ν›„ ꡬ쑰가 μˆ˜μ •λ˜μ–΄μ„œλŠ” μ•ˆ λ˜λŠ” μ„€μ • 객체(Configuration objects), μƒνƒœ 관리 μ•„ν‚€ν…μ²˜, 그리고 데이터 무결성이 치λͺ…μ μœΌλ‘œ μ€‘μš”ν•œ 금육 μ‹œμŠ€ν…œ λ“±μ—μ„œ ν•„μˆ˜μ μΈ 보호 μš”μ†Œλ‘œ 자리 작고 μžˆλ‹€ [1, 3, 8]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Readonly]], [[λ§€ν•‘ νƒ€μž… (Mapped Types)]], [[쑰건뢀 νƒ€μž… (Conditional Types)]], [[μœ ν‹Έλ¦¬ν‹° νƒ€μž… (Utility Types)]] - **Projects/Contexts:** [[ts-essentials]], [[ν”„λ‘ νŠΈμ—”λ“œ μƒνƒœ 관리 (State Management)]], [[μ„€μ • 객체 (Configuration objects)]] - **Contradictions/Notes:** `Readonly`λŠ” κΈ°λ³Έ μ œκ³΅λ˜λ‚˜ `DeepReadonly`λŠ” TypeScript에 λ‚΄μž₯λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λŠ” 점이 νŠΉμ§•μž…λ‹ˆλ‹€ [6]. λ˜ν•œ λŸ°νƒ€μž„μ— μ„±λŠ₯ μ˜€λ²„ν—€λ“œλ₯Ό μΌμœΌν‚€λŠ” `Object.freeze()`의 얕은 동결과 달리, 이 방식은 컴파일 νƒ€μž„μ— νƒ€μž… λ ˆλ²¨μ—μ„œλ§Œ λΆˆλ³€μ„±μ„ κ²€μ‚¬ν•˜κ³  κ°•μ œν•˜λ―€λ‘œ 훨씬 νš¨μœ¨μ μž…λ‹ˆλ‹€ [5]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/μž¬κ·€μ  λΆˆλ³€μ„± (DeepReadonly).md]] ---