Files
2nd/Programming & Language/Readonly Type.md
T

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
auto-reinforced
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