3.9 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-E98170 | 10_Wiki/💡 Topics/Programming & Language | 0.90 |
|
2026-04-20 | [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<T>구문을 사용하여 불변으로 만들 수 있다 [13-15]. 이렇게 선언된 배열은push(),pop()등 배열의 내용을 변이시키는 메서드들이 타입 정의에서 완전히 제거되어 안전한 데이터 전달을 보장한다 [15, 16]. -
얕은 불변성과 깊은 불변성(Deep Readonly)
readonly키워드나 내장된Readonly<T>유틸리티 타입은 객체의 최상위 속성만 보호하는 얕은(Shallow) 불변성만 제공하며 중첩된 객체의 변경은 막지 못한다 [17-19]. 완전히 중첩된 구조까지 불변하게 만들려면, 매핑된 타입과 조건부 타입을 결합한 재귀적 유틸리티 타입인DeepReadonly<T>를 별도로 정의하여 사용해야 한다 [18-20]. -
별칭(Aliasing)으로 인한 한계 및 주의점
readonly데이터는 자신을 가리키는 직접적인 참조에 대해서만 불변을 보장한다. 만약readonly가 적용된 데이터를 가변 파라미터를 받는 함수에 전달할 경우 타입 호환성 규칙에 의해 허용될 수 있으며, 이로 인해 별칭(Alias)을 통한 우회적인 객체 변이가 발생할 수 있다 [21, 22]. 이러한 문제를 방지하려면 함수 시그니처 설계 시 파라미터에도readonly를 일관되게 명시해야 한다 [23].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics:
[[불변성(Immutability)|불변성(Immutability)]],ReadonlyArray,Utility Types,[[구조적 타이핑(Structural Typing)|구조적 타이핑(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