--- id: P-REINFORCE-AUTO-33C0BF 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 ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž…(`Readonly`)์€ TypeScript์—์„œ ํŠน์ • ๊ฐ์ฒด ํƒ€์ž…์˜ ๋ชจ๋“  ์†์„ฑ์— `readonly` ์ˆ˜์‹์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์ดํ›„ ๊ฐ’์„ ์žฌํ• ๋‹นํ•  ์ˆ˜ ์—†๋„๋ก ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค[1, 2]. ์ด๋Š” ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ์ปดํŒŒ์ผ ํƒ€์ž„์—๋งŒ ์—„๊ฒฉํ•˜๊ฒŒ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ•์ œํ•˜์—ฌ, ์˜๋„์น˜ ์•Š์€ ๋ฐ์ดํ„ฐ ๋ณ€ํ˜•์œผ๋กœ ์ธํ•œ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค[3, 4]. ๋‹จ, ์ตœ์ƒ์œ„ ์†์„ฑ์—๋งŒ ์ ์šฉ๋˜๋Š” ์–•์€(shallow) ๋ถˆ๋ณ€์„ฑ๋งŒ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ์™„์ „ํžˆ ๋™๊ฒฐํ•˜๋ ค๋ฉด ์žฌ๊ท€์ ์ธ ํ˜•ํƒœ์˜ ๋”ฅ ๋ฆฌ๋“œ์˜จ๋ฆฌ(Deep Readonly) ํŒจํ„ด์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค[5, 6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **๊ธฐ๋ณธ ์ž‘๋™ ์›๋ฆฌ์™€ ๋ฌธ๋ฒ•:** `Readonly`๋Š” ์ฃผ์–ด์ง„ ํƒ€์ž… `T`์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค[1, 2]. ์„ค์ •์ด๋‚˜ API ์‘๋‹ต, ์ƒํƒœ ๊ด€๋ฆฌ ๋ฆฌ๋“€์„œ ๋“ฑ ์•ฑ ๋‚ด๋‚ด ๊ฐ’์ด ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ณดํ˜ธํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค[7, 8]. TypeScript ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋œ ํ›„์—๋Š” ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ์‹คํ–‰ ์‹œ์ (Runtime)์—๋Š” ์–ด๋– ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค[3, 9]. - **์œ ์‚ฌ ๊ฐœ๋…๊ณผ์˜ ์ฐจ์ด์ :** - **`const`์™€์˜ ์ฐจ์ด:** `const`๋Š” ๋ณ€์ˆ˜ ์ž์ฒด์˜ ์žฌํ• ๋‹น์„ ๋ง‰์ง€๋งŒ ์ฐธ์กฐ๋œ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์†์„ฑ ๋ณ€๊ฒฝ์€ ๋ง‰์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด `readonly`๋Š” ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ์ด ์•„๋‹Œ ๊ฐ์ฒด ์†์„ฑ์ด๋‚˜ ๋ฐฐ์—ด ์š”์†Œ ์ž์ฒด์˜ ๋ณ€๊ฒฝ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค[10, 11]. - **`Object.freeze()`์™€์˜ ์ฐจ์ด:** `Object.freeze()`๋Š” ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด๋ฅผ ๋™๊ฒฐํ•˜๋ฉฐ ์‹คํ–‰ ์„ฑ๋Šฅ์— ๋น„์šฉ์„ ์ฒญ๊ตฌํ•˜์ง€๋งŒ, `readonly`๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ์‹œ์Šคํ…œ์„ ํ†ตํ•ด์„œ๋งŒ ์ˆ˜์ •์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค[4, 12]. - **๋ฐฐ์—ด์—์„œ์˜ ํ™œ์šฉ:** ๊ฐ์ฒด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด์—๋„ `ReadonlyArray` ๋˜๋Š” `readonly T[]` ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[13, 14]. ์ด๋ ‡๊ฒŒ ์„ ์–ธ๋œ ๋ฐฐ์—ด์€ ์š”์†Œ์˜ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, `push()`, `pop()` ๋“ฑ ์›๋ณธ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํƒ€์ž… ์ •์˜์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค[15, 16]. - **ํ•œ๊ณ„์  ๋ฐ ์šฐํšŒ ์ทจ์•ฝ์  (Gotcha):** - **์–•์€ ๋ถˆ๋ณ€์„ฑ(Shallow Immutability):** `Readonly`๋Š” 1๋‹จ๊ณ„ ๊นŠ์ด์˜ ์†์„ฑ์—๋งŒ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด ์†์„ฑ์€ ์—ฌ์ „ํžˆ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งคํ•‘๋œ ํƒ€์ž…๊ณผ ์กฐ๊ฑด๋ถ€ ํƒ€์ž…์„ ๊ฒฐํ•ฉํ•œ ์ปค์Šคํ…€ `DeepReadonly` ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค[5, 6, 17]. - **์—์ผ๋ฆฌ์–ด์‹ฑ(Aliasing) ๋ฌธ์ œ:** `readonly` ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ, ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ํƒ€์ž…(mutable)์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ํƒ€์ž… ํ˜ธํ™˜์„ฑ ๊ทœ์น™์— ์˜ํ•ด ํ†ต๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์šฐํšŒ ๋Œ์—ฐ๋ณ€์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[18, 19]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[แ„‡แ…ฎแ†ฏแ„‡แ…งแ†ซแ„‰แ…ฅแ†ผ(Immutability)|๋ถˆ๋ณ€์„ฑ(Immutability)]], ๋งคํ•‘๋œ ํƒ€์ž…(Mapped Types), [[DeepReadonly|DeepReadonly]] - **Projects/Contexts:** ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ํ•œ ์™ธ๋ถ€ API ์‘๋‹ต ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Redux ๋ฆฌ๋“€์„œ ๋“ฑ)์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ, ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์—ญ ํ™˜๊ฒฝ ์„ค์ •(Configuration) ๊ฐ์ฒด ๋ณดํ˜ธ ๋งฅ๋ฝ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์“ฐ์ž…๋‹ˆ๋‹ค[8, 17]. - **Contradictions/Notes:** TypeScript์˜ ์—์ผ๋ฆฌ์–ด์‹ฑ ํ•œ๊ณ„๋กœ ์ธํ•ด `readonly` ๋ฐ์ดํ„ฐ๊ฐ€ `mutable` ํƒ€์ž…์„ ์š”๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด ๋‚ด๋ถ€์—์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์œ„ํ—˜์ด ์กด์žฌํ•˜๋ฏ€๋กœ, ์™„์ „ํ•œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋ ค๋ฉด ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ฝ๊ธฐ ์ „์šฉ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋„˜๊ธฐ๋Š” ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค[18, 19]. ๋˜ํ•œ, ๋ชจ๋“  `readonly` ์†์„ฑ์„ ๋‹ค์‹œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Œ๋ ค์•ผ ํ•  ๋•Œ๋Š” `Mutable`์ด๋ผ๋Š” ์ปค์Šคํ…€ ํ—ฌํผ ํƒ€์ž…์„ ๋งŒ๋“ค์–ด ๋งคํ•‘ ์ˆ˜์‹์–ด๋ฅผ ์ œ๊ฑฐ(`-readonly`)ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[6]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/Readonly ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž….md ---