--- id: P-REINFORCE-AUTO-07CB26 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - λΆˆλ³€μ„± (Immutability)" --- # [[λΆˆλ³€μ„± (Immutability)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > TypeScriptμ—μ„œ λΆˆλ³€μ„±(Immutability)은 주둜 `readonly` μˆ˜μ‹μ–΄μ™€ `Readonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ 톡해 컴파일 νƒ€μž„μ— 데이터가 μ˜λ„μΉ˜ μ•Šκ²Œ λ³€κ²½λ˜λŠ” 것을 λ°©μ§€ν•˜λŠ” 핡심 κ°œλ…μž…λ‹ˆλ‹€ [1-3]. 이λ₯Ό 톡해 객체의 μ†μ„±μ΄λ‚˜ λ°°μ—΄ μš”μ†Œκ°€ μ΄ˆκΈ°ν™”λœ 이후에 μˆ˜μ •λ˜λŠ” 것을 μ—„κ²©νžˆ μ°¨λ‹¨ν•˜μ—¬ λΆ€μž‘μš©μ„ 쀄이고 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄μ„ μ§€μ›ν•©λ‹ˆλ‹€ [1, 4]. λŸ°νƒ€μž„μ— μ„±λŠ₯ μ˜€λ²„ν—€λ“œλ₯Ό μœ λ°œν•˜λŠ” `Object.freeze()`와 달리 컴파일 μ‹œμ μ—λ§Œ μž‘λ™ν•˜λ―€λ‘œ, 제둜 λŸ°νƒ€μž„ λΉ„μš©μœΌλ‘œ λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•˜λŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€ [1, 3, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λΆˆλ³€μ„± κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜ (`readonly`와 `Readonly`)** TypeScriptμ—μ„œλŠ” κ°μ²΄λ‚˜ 클래슀의 속성, λ°°μ—΄ μ •μ˜ μ‹œ `readonly` μˆ˜μ‹μ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ μ΄ˆκΈ°ν™” ν›„ 값을 λ³€κ²½ν•˜λŠ” 것을 κΈˆμ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 6, 7]. λ˜ν•œ, κΈ°μ‘΄ νƒ€μž…μ˜ λͺ¨λ“  속성을 읽기 μ „μš©μœΌλ‘œ λ³€ν™˜ν•˜λŠ” `Readonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ μ œκ³΅ν•˜μ—¬ μ„€μ • 객체, API 응닡 데이터, μƒνƒœ 관리(λ¦¬λ“€μ„œ) 등을 μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 7, 8]. * **`const` 및 `Object.freeze()`μ™€μ˜ 차이점** λΆˆλ³€μ„±μ„ κ°•μ œν•˜λŠ” 방식에 μžˆμ–΄μ„œ `const`, `Object.freeze()`, 그리고 `readonly`λŠ” λͺ…ν™•ν•œ 차이λ₯Ό λ³΄μž…λ‹ˆλ‹€. * **`const`**: λŸ°νƒ€μž„μ— λ³€μˆ˜ 자체의 μž¬ν• λ‹Ήμ„ λ§‰μ§€λ§Œ, 객체 λ‚΄λΆ€ μ†μ„±μ˜ λ³€κ²½(Mutation)은 막지 λͺ»ν•©λ‹ˆλ‹€ [3, 5, 9]. * **`Object.freeze()`**: λŸ°νƒ€μž„μ— 객체 속성 μˆ˜μ •μ„ μ°¨λ‹¨ν•˜μ§€λ§Œ, 얕은(shallow) λ™κ²°λ§Œ μ§€μ›ν•˜λ©° λŸ°νƒ€μž„ μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [3, 10]. * **`readonly`**: 컴파일 νƒ€μž„μ— 속성 μ ‘κ·Ό 및 μˆ˜μ •μ„ μ°¨λ‹¨ν•˜λ©°, μƒμ„±λœ JavaScriptμ—λŠ” 흔적이 남지 μ•Šμ•„ λŸ°νƒ€μž„ μ„±λŠ₯ λΉ„μš©μ΄ μ „ν˜€ μ—†μŠ΅λ‹ˆλ‹€ [1, 3, 5]. * **얕은 λΆˆλ³€μ„±(Shallow Immutability)κ³Ό 에일리어싱(Aliasing)의 ν•œκ³„** TypeScript의 κΈ°λ³Έ λΆˆλ³€μ„± κΈ°λŠ₯인 `readonly`λ‚˜ `Readonly`λŠ” 객체의 μ΅œμƒμœ„ μ†μ„±λ§Œ λ³΄ν˜Έν•˜λŠ” 얕은 μˆ˜μ€€μ˜ λΆˆλ³€μ„±λ§Œ μ œκ³΅ν•©λ‹ˆλ‹€ [11-13]. 더 큰 λ¬Έμ œμ μ€ '에일리어싱(Aliasing)'μž…λ‹ˆλ‹€. `readonly` νƒ€μž…μœΌλ‘œ 보호된 데이터가 λ³€κ²½ κ°€λŠ₯ν•œ(mutable) λ§€κ°œλ³€μˆ˜λ₯Ό κΈ°λŒ€ν•˜λŠ” ν•¨μˆ˜μ— 전달될 경우, TypeScriptλŠ” 이λ₯Ό ν˜Έν™˜λ˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•˜μ—¬ μ—λŸ¬λ₯Ό λ„μš°μ§€ μ•Šκ³ , ν•΄λ‹Ή ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 원본 데이터가 변이될 수 μžˆλŠ” 취약점이 μ‘΄μž¬ν•©λ‹ˆλ‹€ [14, 15]. * **μž¬κ·€μ  λΆˆλ³€μ„±(Deep Readonly)의 ꡬ좕** μ€‘μ²©λœ κ°μ²΄λ‚˜ λ°°μ—΄ λ‚΄λΆ€ κΉŠμˆ™ν•œ κ³³κΉŒμ§€ μ™„λ²½ν•˜κ²Œ λΆˆλ³€μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” κΈ°λ³Έ κΈ°λŠ₯λ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•©λ‹ˆλ‹€ [12]. 이λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ§€ν•‘ νƒ€μž…(Mapped Types)κ³Ό 쑰건뢀 νƒ€μž…(Conditional Types)을 κ²°ν•©ν•˜μ—¬ λ‚΄λΆ€ μ†μ„±κΉŒμ§€ μž¬κ·€μ μœΌλ‘œ `readonly`λ₯Ό μ μš©ν•˜λŠ” μ»€μŠ€ν…€ `DeepReadonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ ꡬ좕해 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [12, 13, 16]. μ΄λŠ” 트리 κ΅¬μ‘°λ‚˜ λ³΅μž‘ν•œ μƒνƒœ 관리 μ‹œμŠ€ν…œμ—μ„œ 데이터 무결성을 보μž₯ν•˜λŠ” κ°•λ ₯ν•œ 방패 역할을 ν•©λ‹ˆλ‹€ [13]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[readonly μˆ˜μ‹μ–΄]], [[Readonly μœ ν‹Έλ¦¬ν‹° νƒ€μž…]], [[DeepReadonly (μž¬κ·€μ  λΆˆλ³€μ„±)]], [[에일리어싱 (Aliasing)]], [[ꡬ쑰적 타이핑 (Structural Typing)]] - **Projects/Contexts:** [[Redux λ“± μƒνƒœ 관리 (State Management)]], [[API 응닡 데이터 λͺ¨λΈλ§]], [[κΈ€λ‘œλ²Œ μ„€μ • 객체 (Configuration Objects) 보호]] - **Contradictions/Notes:** TypeScript의 `readonly`λŠ” μ™„λ²½ν•œ λŸ°νƒ€μž„ λΆˆλ³€μ„±μ„ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 컴파일 νƒ€μž„μ—λ§Œ μœ νš¨ν•˜λ©° 컴파일 ν›„ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ—μ„œλŠ” ν•΄λ‹Ή μ œμ•½μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€ [1]. λ˜ν•œ, 에일리어싱을 톡해 `readonly` 배열이 일반 λ°°μ—΄ νƒ€μž…μœΌλ‘œ 취급될 경우 νƒ€μž… μ‹œμŠ€ν…œμ„ μš°νšŒν•˜μ—¬ 변이가 일어날 수 μžˆμœΌλ―€λ‘œ ν•¨μˆ˜ μ‹œκ·Έλ‹ˆμ²˜ 섀계 μ‹œ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [14, 15]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/λΆˆλ³€μ„± (Immutability).md]] ---