TypeScript는 정적 타입 언어로 JavaScript의 타입 안정성을 향상시키는 도구입니다. 그런데 TypeScript에서 unknown과 any라는 두 가지 다른 타입을 제공하고 있습니다. 이 두 타입은 어떻게 다르며, 어떤 상황에서 어떻게 사용해야 할까요? 이 블로그 포스트에서 그 차이와 각각의 사용 사례에 대해 알아보겠습니다.
‘unknown’ 타입
‘unknown’ 타입은 TypeScript 3.0 이후에 도입된 상대적으로 새로운 개념입니다. ‘unknown’ 타입은 다음과 같은 특징을 가집니다:
- 타입 안정성: ‘unknown’ 타입은 ‘any’ 타입보다 타입 안정성이 높습니다. ‘unknown’ 타입의 변수나 값은 다른 타입으로 캐스팅하기 전에는 해당 타입의 기능을 사용할 수 없습니다.
- 명시적 캐스팅 필요: ‘unknown’ 타입을 가진 변수나 값은 명시적인 타입 캐스팅이나 타입 가드를 통해 다른 타입으로 변환해야 합니다.
- 런타임 에러 방지: ‘unknown’ 타입을 사용하면 런타임 에러를 사전에 방지할 수 있습니다. 예를 들어, ‘unknown’ 타입 변수에 숫자를 할당하려고 하면 컴파일 에러가 발생합니다.
‘any’ 타입
‘any’ 타입은 TypeScript에서 가장 유연한 타입 중 하나입니다. ‘any’ 타입은 다음과 같은 특징을 가집니다:
- 타입 안정성 저하: ‘any’ 타입은 모든 타입의 값을 허용하며, 컴파일러가 해당 값에 대한 타입 검사를 수행하지 않습니다. 이는 타입 안정성을 저하시킵니다.
- 모든 타입 호환: ‘any’ 타입은 다른 모든 타입과 호환됩니다. 따라서 ‘any’ 타입의 값은 어떤 타입의 변수에든 할당할 수 있습니다.
- 주의 필요: ‘any’ 타입을 사용하면 타입 에러를 무시할 수 있기 때문에 주의해서 사용해야 합니다. 주로 JavaScript 라이브러리와 상호 작용하거나, 타입 정보를 확실히 모를 때 등에 사용됩니다.
어떤 것을 사용해야 할까요?
대체로 ‘unknown’ 타입을 사용하여 타입 안정성을 높이고 런타임 에러를 방지하는 것이 좋습니다. ‘unknown’ 타입은 코드를 더 견고하게 만들어줍니다. 그러나 때로는 외부 라이브러리와 상호 작용하거나 타입 정보를 확실히 모를 때 ‘any’ 타입을 사용해야 할 수도 있습니다. 이 경우 ‘any’ 타입을 사용할 때 주의해서 타입 안정성을 유지해야 합니다.
두 타입 모두 TypeScript의 타입 시스템을 더 유연하게 사용할 수 있게 해주며, 상황에 맞게 선택하여 사용해야 합니다.