전체 목록
TypeScriptMedium#302

unknown과 any는 타입 안정성 측면에서 어떤 차이가 있나요?

#TypeScript#unknown#any#타입안전성

답변 포인트

값을 사용하기 전에 타입 검사를 강제하는지 여부를 기준으로 생각해보세요.

정답 및 해설

빠른 요약

any는 타입 검사를 사실상 비활성화해 어떤 속성 접근이나 함수 호출도 허용합니다. unknown은 어떤 값이든 받을 수 있지만, 실제로 사용하려면 타입 좁히기나 검증을 먼저 해야 합니다.

any는 타입 검사를 사실상 비활성화해 어떤 속성 접근이나 함수 호출도 허용합니다. unknown은 어떤 값이든 받을 수 있지만, 실제로 사용하려면 타입 좁히기나 검증을 먼저 해야 합니다. 외부 입력처럼 타입을 확신할 수 없는 값에는 any보다 unknown이 안전합니다.

핵심 개념

핵심 기준은 타입 검사를 우회할지 강제할지의 차이입니다. 이 개념은 단순히 용어를 외우는 것보다, 어떤 문제를 줄이기 위해 등장했는지와 실제 코드나 운영 환경에서 어떤 trade-off를 만드는지 함께 이해하는 것이 중요합니다.

타입스크립트의 장점은 컴파일 시점에 위험한 사용을 발견하는 데 있습니다. any를 남발하면 이 장점이 사라지고 런타임 오류가 뒤늦게 드러납니다. unknown은 불확실한 값을 표현하되, 사용 전에 검증하도록 만들어 안전한 경계를 세웁니다.

동작 흐름

  1. 외부 API, JSON 파싱, 에러 객체처럼 타입을 모르는 값을 받습니다.
  2. 일단 unknown으로 선언해 직접 사용을 막습니다.
  3. typeof, Array.isArray, 사용자 정의 type guard로 타입을 좁힙니다.
  4. 검증된 범위 안에서만 속성 접근이나 함수 호출을 수행합니다.

실제 예시

TypeScript
function printMessage(value: unknown) {
  if (typeof value === 'string') {
    console.log(value.toUpperCase());
  }
}

unknown 값은 문자열인지 확인한 뒤에야 문자열 메서드를 안전하게 사용할 수 있습니다.

실무에서 주의할 점

  • any는 마이그레이션 중 임시로만 사용하고 범위를 좁히는 것이 좋습니다.
  • unknown을 사용해도 검증 로직이 부정확하면 런타임 오류가 날 수 있습니다.
  • 타입 단언(as)을 남발하면 unknown의 안전 장점이 줄어듭니다.

함께 연결해서 보면 좋은 키워드

TypeScript, unknown, any, 타입안전성

면접에서 짚으면 좋은 포인트

  • 외부 입력은 unknown으로 받고 좁힌 뒤 사용하는 경계를 강조하면 타입 안정성 의도가 분명해집니다.
  • any는 마이그레이션이나 임시 우회로 제한하고, 사용 위치를 추적 가능하게 관리하는 것이 좋습니다.

정리

한 줄로 정리하면, any는 타입 검사를 우회하고, unknown은 값을 사용하기 전에 타입 검증을 강제해 더 안전합니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.

관련 질문

같은 카테고리/태그 기준