0Pricing
TypeScript Academy · 강의

unknown과 any 비교: 더 안전한 선택

unknown을 사용하면 사용 전에 형식을 확인해야 하는 이유를 학습합니다.

unknown과 any 비교: 더 안전한 선택은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

TypeScript 3.0에서는 `any`를 타입 안전하게 대체하는 `unknown` 타입을 도입했습니다. 이 학습에서는 `unknown`이 더 안전한 이유와 사용 시점을 알아봅니다.

any의 문제점

`any`를 사용하면 TypeScript가 모든 검사를 중단합니다. 제한이나 안전성 없이 메서드를 호출하고, 속성에 접근하며, 타입이 지정된 변수에 할당할 수 있습니다.
let val: any = getData();
val.someMethod(); // TypeScript: OK. Runtime: possible crash

unknown 소개

`unknown`은 타입 안전성을 갖춘 최상위 타입입니다. `any`처럼 어떤 값이든 저장할 수 있지만, `any`와 달리 먼저 타입을 좁히지 않으면 사용할 수 없습니다.
let val: unknown = getData();
// val.someMethod(); // Error: Object is of type 'unknown'

사용하기 전에 unknown 좁히기

`unknown` 값을 사용하려면 타입 검사로 타입을 좁혀야 합니다. 그러면 TypeScript가 좁혀진 타입에 대한 연산을 허용합니다.
let input: unknown = getInput();
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK — narrowed to string
}

unknown은 특정 타입에 할당할 수 없습니다

검사나 단언 없이 `unknown`을 특정 타입에 할당할 수 없습니다. 따라서 값을 사용하기 전에 검증해야 합니다.
let x: unknown = 'hello';
// let s: string = x; // Error
let s: string = x as string; // OK with assertion

catch 블록에서 unknown 사용하기

TypeScript 4.0 이상에서는 잡힌 오류가 기본적으로 `unknown`이 됩니다. 오류 타입을 확인해야 하므로 이전의 `any` 기본값보다 안전합니다.
try {
  doSomething();
} catch (err: unknown) {
  if (err instanceof Error) {
    console.log(err.message); // safe
  }
}

외부 데이터에 unknown 사용하기

JSON을 분석하거나 API에서 데이터를 받을 때는 먼저 `unknown`으로 타입을 지정하고, 사용하기 전에 검증하세요.
const raw: unknown = JSON.parse(text);
if (
  typeof raw === 'object' &&
  raw !== null &&
  'name' in raw
) {
  console.log((raw as any).name);
}

unknown과 타입 가드

사용자 정의 타입 가드는 `unknown`과 완벽하게 작동하므로, 사용하기 전에 복잡한 형태를 검증할 수 있습니다.
function isUser(val: unknown): val is { name: string } {
  return typeof val === 'object' && val !== null && 'name' in val;
}

unknown과 never

`unknown`은 최상위 타입이므로 모든 타입을 할당할 수 있습니다. `never`는 최하위 타입이므로 어떤 타입도 할당할 수 없습니다. 두 타입은 서로 반대입니다.
// unknown: anything can be assigned to it
let a: unknown = 42; // OK

// never: nothing can be assigned to it
function fail(): never { throw new Error(); }

any와 unknown 중 선택하기

타입이 정해지지 않은 데이터(JSON, 사용자 입력, 외부 API)를 받을 때는 `unknown`을 사용하세요. 마이그레이션 중이거나 타입이 없는 라이브러리를 사용할 때처럼 정말 필요한 경우에만 `any`를 사용하세요.

실행 시점 검증 라이브러리

Zod, Valibot, io-ts와 같은 라이브러리는 `unknown`과 함께 사용하기에 적합합니다. 이러한 라이브러리는 `unknown` 입력을 분석하고 검증하여 타입이 올바르게 지정된 값을 반환합니다.
import { z } from 'zod';
const UserSchema = z.object({ name: z.string(), age: z.number() });
const user = UserSchema.parse(unknownData); // throws if invalid

빠른 확인

TypeScript에서 `unknown` 값을 사용하려면 먼저 무엇을 해야 하나요?

복습

`unknown`은 `any`를 안전하게 대체하는 타입입니다. 어떤 값이든 허용하지만 사용하기 전에 타입을 좁히도록 강제합니다. 외부 데이터, catch 블록, 그리고 타입을 실제로 알 수 없는 모든 상황에서 사용하세요.

자주 묻는 질문

“unknown과 any 비교: 더 안전한 선택” 강의는 무료인가요?

네 — “unknown과 any 비교: 더 안전한 선택” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“unknown과 any 비교: 더 안전한 선택”에서 뭘 배우나요?

unknown을 사용하면 사용 전에 형식을 확인해야 하는 이유를 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“unknown과 any 비교: 더 안전한 선택” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 기본 형식: string, number, boolean
  2. any 형식과 피해야 하는 이유
  3. unknown과 any 비교: 더 안전한 선택
  4. null, undefined 및 엄격한 null 검사
← TypeScript Academy(으)로 돌아가기