1. any와 unknown의 기본적인 차이
특성 | any | unknown |
제한 | 아무런 제한 없음 | 모든 작업이 제한됨 |
타입 검사 | 런타임시 타입 오류를 방지하지 않음 | 컴파일시 타입 확인이 필요함 |
유연성 | 매우 유연함(모든 타입에 할당 가능) | 안전함(할당은 가능하지만 사용은 제한됨) |
2. any
- any는 “아무거나 될 수 있음”을 의미하며, 모든 작업이 허용됩니다.
- 안전성이 낮음: 타입스크립트가 타입 검사를 포기하므로, 런타임 오류가 발생할 가능성이 높습니다.
let value: any = "Hello";
value.foo(); // 런타임 오류 발생 가능하지만 컴파일러가 경고하지 않음
3. unknown
- unknown은 “아직 타입을 알 수 없음”을 의미하며, 특정 타입으로 명확히 확인되기 전까지 사용이 제한됩니다.
- 안전성이 높음: 값을 사용하려면 타입을 좁히거나(type narrowing) 타입 단언(type assertion)을 해야 합니다.
let value: unknown = "Hello";
value.foo(); // 컴파일 오류: 'foo' 속성을 사용할 수 없음
if (typeof value === "string") {
console.log(value.toUpperCase()); // 타입이 좁혀진 후에는 안전하게 사용 가능
}
4. any와 unknown의 관계
공통점:
둘 다 모든 타입의 값을 할당받을 수 있습니다.
let value1: any = 42;
let value2: unknown = 42; // 모두 허용
차이점:
- any는 아무 작업이나 허용: 어떤 속성 접근이나 연산도 제한이 없습니다.
- unknown은 제한적: 값을 사용하려면 반드시 타입 확인을 거쳐야 합니다.
5. 왜 unknown이 any의 counterpart인가?
- any는 타입 검사와 안전성을 포기한 “최대 유연성”을 제공합니다.
- 반대로, unknown은 타입 안정성을 유지하기 위해 유연성을 제한합니다.
- 두 타입 모두 “모든 타입의 값을 받을 수 있다”는 공통점을 가지지만, 사용 방식과 안전성에서 대조적입니다.
6. 실제 사용 시 예
- any: 빠르게 개발하거나 타입 검사에 신경 쓰지 않을 때 사용하지만, 권장되지 않습니다.
- unknown: 타입을 미리 알 수 없지만, 이후 타입 확인을 통해 안전하게 사용하고자 할 때 적합합니다.
요약하자면, unknown은 any와 대조적으로 타입 안정성을 유지하기 위한 타입스크립트의 도구입니다. “counterpart”라는 표현은 이 대조적인 특성을 나타냅니다. 😊
'코드 > Typescript' 카테고리의 다른 글
(Typescript) as unknown as typeof data (0) | 2025.01.23 |
---|