4.1 KiB
4.1 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-EDA6A3 | 10_Wiki/💡 Topics/Programming & Language | 0.90 |
|
2026-04-20 | [P-Reinforce] Continuous Worker - Readonly Type |
Readonly Type
📌 한 줄 통찰 (The Karpathy Summary)
TypeScript의
Readonly Type(또는readonly수식어)은 객체의 속성, 배열 등이 초기화된 이후 수정되는 것을 방지하여 타입 수준에서 불변성(Immutability)을 강제하는 기능입니다[1, 2]. 이는 런타임 오버헤드 없이 컴파일 타임에 예기치 않은 데이터의 변이를 차단하며, 변수의 재할당을 막는const나 런타임 동작인Object.freeze()와 구별됩니다[3-5]. 주로 설정 객체, API 응답, 상태 관리 등 변경되지 않아야 하는 데이터 구조를 보호하는 데 사용됩니다[6, 7].
📖 구조화된 지식 (Synthesized Content)
- 작동 방식 및 컴파일 타임 보호:
readonly는 객체의 속성이나 클래스, 인터페이스에 적용되어 할당 후 변경(mutate) 시도를 할 때 컴파일러 수준에서 에러를 발생시킵니다[3, 8]. 이 기능은 오직 컴파일 시점에만 존재하며, 자바스크립트로 변환된 이후에는 제거되므로 성능 저하나 런타임 오버헤드를 발생시키지 않습니다[3, 5, 9]. Readonly<T>유틸리티 타입: TypeScript는 기존 객체 타입의 모든 속성을 읽기 전용으로 변환해 주는Readonly<T>내장 유틸리티 타입을 제공합니다[2, 10]. 만약readonly속성을 다시 가변(mutable) 상태로 되돌리고 싶다면, 매핑된 타입(Mapped Type) 구문에서-readonly제어자를 사용하여 속성을 제거할 수 있습니다[11].- 배열과 튜플의 불변성:
배열이나 튜플에
readonly제어자를 붙이거나ReadonlyArray<T>를 사용하면, 배열을 변이시키는push,pop과 같은 메서드가 타입 시그니처에서 제거되어 원천적으로 사용이 차단됩니다[12, 13]. 단,map이나filter같이 원본을 수정하지 않고 새로운 배열을 반환하는 메서드는 그대로 사용할 수 있습니다[12]. - 얕은 불변성(Shallow Immutability)의 한계:
기본적인
readonly제어자와Readonly<T>타입은 최상위 속성에만 적용되는 얕은(shallow) 수준의 보호만 제공하여 중첩된 객체 내부는 여전히 변경될 수 있습니다[4, 5, 14]. 이를 해결하기 위해 매핑 타입과 조건부 타입을 결합하여 재귀적으로 속성을 동결하는DeepReadonly<T>커스텀 타입을 직접 정의하여 사용해야 합니다[4, 14, 15]. - 별칭(Aliasing)으로 인한 취약점:
readonly타입의 데이터를 가변(mutable) 매개변수를 기대하는 함수에 전달할 경우, TypeScript는 타입 호환성 규칙에 의해 이를 허용합니다[16]. 이로 인해readonly로 선언된 데이터라 하더라도 우회적인 경로(Alias)를 통해 값이 수정될 수 있는 한계(Gotcha)가 존재하므로 함수 시그니처 설계 시 주의가 필요합니다[16-18].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: Immutability, Utility Types, DeepReadonly, Object.freeze(), Mapped Types
- Projects/Contexts: Functional Programming, State Management
- Contradictions/Notes: 자바스크립트의
const는 변수 자체의 재할당을 막고 객체 내부 속성의 변경은 허용하지만, TypeScript의readonly는 객체 내부 속성의 변경을 막습니다[4, 19]. 또한Object.freeze()는 런타임에 얕은 동결을 수행하지만,readonly는 런타임 성능 비용 없이 컴파일 타임에만 엄격하게 검사한다는 차이가 있습니다[5, 20, 21].
Last updated: 2026-04-18
- Raw Source: 00_Raw/2026-04-20/Readonly Type.md