TypeScript객체와 함수

객체 타입의 optional과 readonly

객체 프로퍼티의 존재 여부와 수정 가능성을 타입 수준에서 표현하는 optional, readonly의 핵심을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

ts
interface User {
  id: number;
  nickname?: string;
  readonly createdAt: Date;
}

설명

  • ?는 해당 프로퍼티가 없어도 되는 선택 속성임을 뜻합니다.
  • readonly는 프로퍼티가 존재하더라도 재할당할 수 없음을 타입 차원에서 표현합니다.
  • 선택 속성은 API 응답이나 부분 업데이트 객체처럼, 값이 있을 수도 없을 수도 있는 구조에 자주 쓰입니다.
  • readonly는 불변 데이터 구조 의도를 드러내고, 실수로 상태를 덮어쓰는 문제를 줄이는 데 도움이 됩니다.
  • 다만 readonly가 깊은 불변성을 자동으로 보장하는 것은 아니므로, 중첩 객체까지 모두 잠그고 싶다면 다른 전략이 필요할 수 있습니다.

짧은 예제

ts
interface UpdateUser {
  nickname?: string;
}

interface User {
  readonly id: number;
  name: string;
}

빠른 정리

문법의미
nickname?: string속성이 없어도 됨
readonly id: number재할당 금지
잘 맞는 곳부분 업데이트, 설정 객체, 식별자
장점의도 표현, 실수 방지
한계깊은 불변성까지 자동 보장하진 않음

주의할 점

optional 속성은 "항상 문자열이거나 undefined"가 아니라, 아예 속성이 없을 수도 있음을 포함합니다. 접근 전에 존재 여부를 고려하는 습관이 중요합니다.

참고 링크

1 sources