--- id: P-REINFORCE-AUTO-92E2DD 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|readonly]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > `readonly`λŠ” TypeScriptμ—μ„œ 객체의 μ†μ„±μ΄λ‚˜ λ°°μ—΄, νŠœν”Œμ΄ μ΄ˆκΈ°ν™”λœ 이후에 μˆ˜μ •λ˜μ§€ μ•Šλ„λ‘ λ°©μ§€ν•˜λŠ” μˆ˜μ‹μ–΄μ΄μž μœ ν‹Έλ¦¬ν‹° νƒ€μž…μž…λ‹ˆλ‹€ [1-3]. λ³€μˆ˜μ˜ μž¬ν• λ‹Ήμ„ λ§‰λŠ” `const`와 달리 객체 λ‚΄λΆ€ ꡬ쑰의 λΆˆλ³€μ„±μ„ μ œμ–΄ν•˜λ©°, λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 없이 컴파일 νƒ€μž„μ— 였λ₯˜λ₯Ό μž‘μ•„λ‚΄μ–΄ μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό 예츑 κ°€λŠ₯성을 λ†’μž…λ‹ˆλ‹€ [2, 4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ 방식 및 μ„±λŠ₯:** `readonly`λŠ” μ „μ μœΌλ‘œ 컴파일 νƒ€μž„μ—λ§Œ λ™μž‘ν•˜λŠ” κΈ°λŠ₯으둜, 컴파일 ν›„ μƒμ„±λœ JavaScript μ½”λ“œμ—μ„œλŠ” 흔적이 μ‚¬λΌμ§‘λ‹ˆλ‹€ [2, 6]. λ”°λΌμ„œ μ„±λŠ₯에 μ–΄λ– ν•œ λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œλ„ μ£Όμ§€ μ•ŠμœΌλ©΄μ„œ μ†μ„±μ˜ λΆˆλ³€μ„±μ„ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 5, 6]. * **객체 및 ν΄λž˜μŠ€μ—μ„œμ˜ ν™œμš©:** μΈν„°νŽ˜μ΄μŠ€λ‚˜ νƒ€μž… 별칭, 클래슀의 속성에 `readonly`λ₯Ό μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν΄λž˜μŠ€μ—μ„œλŠ” μ„ μ–Έ μ‹œμ μ΄λ‚˜ μƒμ„±μž(constructor) λ‚΄λΆ€μ—μ„œλ§Œ μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯ν•˜λ©°, κ·Έ 이후에 값을 μˆ˜μ •ν•˜λ €κ³  μ‹œλ„ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ [7, 8]. μ΄λŠ” μ‹œμŠ€ν…œμ˜ 고유 μ‹λ³„μž(ID)λ‚˜ ν™˜κ²½ μ„€μ • κ°’μ²˜λŸΌ 생λͺ… μ£ΌκΈ° λ™μ•ˆ λ³€ν•˜μ§€ μ•Šμ•„μ•Ό ν•˜λŠ” 데이터λ₯Ό λ³΄ν˜Έν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€ [7, 9]. * **λ°°μ—΄κ³Ό νŠœν”Œμ˜ 보호:** 배열을 `readonly T[]` λ˜λŠ” `ReadonlyArray`둜 μ„ μ–Έν•˜λ©΄ `push`, `pop`, μš”μ†Œ 직접 μž¬ν• λ‹Ή λ“± 배열을 λ³€μ΄μ‹œν‚€λŠ” λͺ¨λ“  λ©”μ„œλ“œμ™€ μž‘μ—…μ΄ νƒ€μž… μ‹œμŠ€ν…œμ—μ„œ μ œκ±°λ˜μ–΄ μ•ˆμ „ν•˜κ²Œ λ³΄ν˜Έλ©λ‹ˆλ‹€ [10-12]. νŠœν”Œ μ—­μ‹œ 각 μœ„μΉ˜μ˜ 값을 κ³ μ •ν•˜κΈ° μœ„ν•΄ `readonly`λ₯Ό μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10]. * **const 및 Object.freeze()μ™€μ˜ 비ꡐ:** * `const`: λŸ°νƒ€μž„μ— λ³€μˆ˜ 자체의 μž¬ν• λ‹Ήμ„ λ°©μ§€ν•˜μ§€λ§Œ, 참쑰된 객체 λ‚΄λΆ€ μ†μ„±μ˜ 변경은 막지 λͺ»ν•©λ‹ˆλ‹€ [4, 13, 14]. * `Object.freeze()`: λŸ°νƒ€μž„μ— 객체의 얕은 μˆ˜μ •μ„ μ°¨λ‹¨ν•˜λ©° μ„±λŠ₯ λΉ„μš©μ΄ λ°œμƒν•©λ‹ˆλ‹€ [5, 14, 15]. * `readonly`: 컴파일 νƒ€μž„μ— 객체/λ°°μ—΄ λ‚΄λΆ€ μ†μ„±μ˜ 변경을 νƒ€μž… λ ˆλ²¨μ—μ„œ μ°¨λ‹¨ν•˜μ—¬, μ‹€ν–‰ μ „ μ½”λ“œ μž‘μ„± λ‹¨κ³„μ—μ„œ μ•ˆμ „μ„ 보μž₯ν•©λ‹ˆλ‹€ [4, 5, 14]. * **얕은 λΆˆλ³€μ„±(Shallow Immutability)의 ν•œκ³„:** 기본적인 `readonly` μˆ˜μ‹μ–΄λ‚˜ `Readonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ€ μ΅œμƒμœ„ 레벨의 μ†μ„±μ—λ§Œ μ–•κ²Œ μ μš©λ©λ‹ˆλ‹€ [16-18]. 즉, μ€‘μ²©λœ λ‚΄λΆ€ κ°μ²΄λŠ” μ—¬μ „νžˆ μˆ˜μ •λ  수 μžˆμŠ΅λ‹ˆλ‹€ [17, 18]. μ™„λ²½ν•œ κΉŠμ€ λΆˆλ³€μ„±μ„ μ›ν•œλ‹€λ©΄ μž¬κ·€μ μœΌλ‘œ 속성을 μž κ·ΈλŠ” μ»€μŠ€ν…€ `DeepReadonly` μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ λ³„λ„λ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€ [17-19]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** const, Object.freeze(), ReadonlyArray, [[DeepReadonly|DeepReadonly]], Utility Types - **Projects/Contexts:** [[ᄉᅑᆼᄐᅒ α„€α…ͺᆫ라(State Management)|State Management]], Configuration Objects, API Responses - **Contradictions/Notes:** `readonly`λŠ” 데이터 변경을 λ§‰λŠ” ν›Œλ₯­ν•œ νƒ€μž… μ œμ–΄ μž₯μΉ˜μ§€λ§Œ, μ»΄νŒŒμΌλŸ¬λŠ” `readonly` 데이터λ₯Ό λ³€κ²½ κ°€λŠ₯(mutable)ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” 것(Aliasing)을 ν—ˆμš©ν•˜λ―€λ‘œ 이둜 μΈν•œ 우회적 변이(mutation)κ°€ λ°œμƒν•  수 μžˆλ‹€λŠ” ꡬ쑰적 맹점을 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [20, 21]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/readonly.md ---