--- id: P-REINFORCE-AUTO-E98170 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - readonly μˆ˜μ‹μ–΄" --- # [[readonly μˆ˜μ‹μ–΄]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **컴파일 νƒ€μž„μ˜ λΆˆλ³€μ„± κ°•μ œ** `readonly` μˆ˜μ‹μ–΄λŠ” 속성이 μ΄ˆκΈ°ν™”λœ ν›„ μž¬ν• λ‹Ήλ˜κ±°λ‚˜ μˆ˜μ •λ˜λŠ” 것을 λ°©μ§€ν•œλ‹€ [3]. ꡬ쑰적 νƒ€μž… 검사 μ‹œ ν•΄λ‹Ή μ†μ„±μ˜ 변이(Mutation) 연산을 μ‹œκ·Έλ‹ˆμ²˜μ—μ„œ λ°°μ œν•¨μœΌλ‘œμ¨, μ»΄νŒŒμΌλŸ¬κ°€ κ°’μ˜ μˆ˜μ •μ„ 미리 포착해 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€ [8]. * **`const` 및 `Object.freeze()`μ™€μ˜ 차별점** * **λŒ€μƒκ³Ό λ²”μœ„:** `const`λŠ” λ³€μˆ˜ 자체의 μž¬ν• λ‹Ήμ„ 막을 뿐 객체 λ‚΄λΆ€ μ†μ„±μ˜ λ³€μ΄λŠ” 막지 λͺ»ν•˜μ§€λ§Œ, `readonly`λŠ” λ³€μˆ˜κ°€ μ•„λ‹Œ 객체의 속성(Property)에 직접 μ μš©λ˜μ–΄ λ‚΄μš©λ¬Όμ˜ 할당을 λ§‰λŠ”λ‹€ [9-11]. * **λ™μž‘ μ‹œμ κ³Ό μ„±λŠ₯:** `Object.freeze()`λŠ” λŸ°νƒ€μž„μ— μž‘λ™ν•˜λ©° μ„±λŠ₯ λΉ„μš©μ„ μˆ˜λ°˜ν•˜λŠ” 반면, `readonly`λŠ” 컴파일 νƒ€μž„μ—λ§Œ μž‘λ™ν•˜μ—¬ λŸ°νƒ€μž„ μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ μ „ν˜€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€ [5, 11, 12]. * **λ°°μ—΄κ³Ό νŠœν”Œμ˜ 보호** λ°°μ—΄μ΄λ‚˜ νŠœν”Œμ˜ 경우 `readonly T[]` λ˜λŠ” `ReadonlyArray` ꡬ문을 μ‚¬μš©ν•˜μ—¬ λΆˆλ³€μœΌλ‘œ λ§Œλ“€ 수 μžˆλ‹€ [13-15]. μ΄λ ‡κ²Œ μ„ μ–Έλœ 배열은 `push()`, `pop()` λ“± λ°°μ—΄μ˜ λ‚΄μš©μ„ λ³€μ΄μ‹œν‚€λŠ” λ©”μ„œλ“œλ“€μ΄ νƒ€μž… μ •μ˜μ—μ„œ μ™„μ „νžˆ μ œκ±°λ˜μ–΄ μ•ˆμ „ν•œ 데이터 전달을 보μž₯ν•œλ‹€ [15, 16]. * **얕은 λΆˆλ³€μ„±κ³Ό κΉŠμ€ λΆˆλ³€μ„±(Deep Readonly)** `readonly` ν‚€μ›Œλ“œλ‚˜ λ‚΄μž₯된 `Readonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ€ 객체의 μ΅œμƒμœ„ μ†μ„±λ§Œ λ³΄ν˜Έν•˜λŠ” 얕은(Shallow) λΆˆλ³€μ„±λ§Œ μ œκ³΅ν•˜λ©° μ€‘μ²©λœ 객체의 변경은 막지 λͺ»ν•œλ‹€ [17-19]. μ™„μ „νžˆ μ€‘μ²©λœ κ΅¬μ‘°κΉŒμ§€ λΆˆλ³€ν•˜κ²Œ λ§Œλ“€λ €λ©΄, λ§€ν•‘λœ νƒ€μž…κ³Ό 쑰건뢀 νƒ€μž…μ„ κ²°ν•©ν•œ μž¬κ·€μ  μœ ν‹Έλ¦¬ν‹° νƒ€μž…μΈ `DeepReadonly`λ₯Ό λ³„λ„λ‘œ μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [18-20]. * **별칭(Aliasing)으둜 μΈν•œ ν•œκ³„ 및 주의점** `readonly` λ°μ΄ν„°λŠ” μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” 직접적인 참쑰에 λŒ€ν•΄μ„œλ§Œ λΆˆλ³€μ„ 보μž₯ν•œλ‹€. λ§Œμ•½ `readonly`κ°€ 적용된 데이터λ₯Ό κ°€λ³€ νŒŒλΌλ―Έν„°λ₯Ό λ°›λŠ” ν•¨μˆ˜μ— 전달할 경우 νƒ€μž… ν˜Έν™˜μ„± κ·œμΉ™μ— μ˜ν•΄ ν—ˆμš©λ  수 있으며, 이둜 인해 별칭(Alias)을 ν†΅ν•œ 우회적인 객체 변이가 λ°œμƒν•  수 μžˆλ‹€ [21, 22]. μ΄λŸ¬ν•œ 문제λ₯Ό λ°©μ§€ν•˜λ €λ©΄ ν•¨μˆ˜ μ‹œκ·Έλ‹ˆμ²˜ 섀계 μ‹œ νŒŒλΌλ―Έν„°μ—λ„ `readonly`λ₯Ό μΌκ΄€λ˜κ²Œ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€ [23]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** `[[λΆˆλ³€μ„±(Immutability)]]`, `[[ReadonlyArray]]`, `[[Utility Types]]`, `[[ꡬ쑰적 타이핑(Structural Typing)]]` - **Projects/Contexts:** `[[μƒνƒœ 관리(State Management) 및 λ¦¬λ“€μ„œ(Reducers)]]`, `[[API 응닡 및 ν™˜κ²½ μ„€μ • λͺ¨λΈλ§]]` - **Contradictions/Notes:** `readonly`λŠ” νƒ€μž… λ ˆλ²¨μ—μ„œ μ™„λ²½ν•œ λΆˆλ³€μ„±μ„ 보μž₯ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, TypeScript의 νƒ€μž… ν˜Έν™˜μ„±(별칭 문제)으둜 인해 νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²¨μ§„ κ³³μ—μ„œ μ˜λ„μΉ˜ μ•Šκ²Œ 값이 λ³€κ²½λ˜λŠ” ꡬ멍이 λ°œμƒν•  수 μžˆλ‹€ [21]. λ˜ν•œ μ€‘μ²©λœ 객체λ₯Ό 기본적으둜 λ³΄ν˜Έν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ꡬ쑰가 λ³΅μž‘ν•  λ•ŒλŠ” μ‚¬μš©μž μ •μ˜ `DeepReadonly`κ°€ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λœλ‹€ [18]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/readonly μˆ˜μ‹μ–΄.md]] ---