min

any와 unknown에 차이점에 대하여... 본문

자바스크립트

any와 unknown에 차이점에 대하여...

minprogramming 2023. 8. 12. 17:41

<회고록>

오늘은 any와 unknown의 차이점에 대해서 알아볼려고 한다. 이 말을 들었을 때 다음과 같은 생각이 들 것이다. any는 어떤 거고 , unknonw은 어떤 것이길레 둘의 차이점을 분석하는 것일까? 이 질문에 대한 답을 얻기 위해서 먼저 any와 unknown이 무엇인지 부터 알아보도록 하겠다.

1. any와 unknown의 공통점이란?

any와 unknown는 모두 어떤 값에든 할당 될 수 있는 타입이다. 이는 결국 수동적인 타입을 의미한다. 이런 any와 unknown은 수동적인 타입이다보니 정적 타입 언어인 typescript의 장점을 살리는 데 있어서는 좋지 못한 타입이다. 그렇다면 왜 이런 any와 unknown이 만들어진 것일까? 그 이유는 사실상 자바스크립트에 답이 있다. 자바스크립트의 경우 생산성이 높은 언어이다. 이는 결국 자바스크립트의 데이터 타입이 유동적으로 변한다는 것을 의미한다. 이렇게 타입적인 면에서 자유도가 높은 언어의 경우 자유도를 한정시킨다고 해도 이 높은 자유도를 완전히 막지는 못할 것이다. 그래서 이렇게 자유도가 높은 데이터들을 위해서 any와 unknown이 나왔다.

 

2. any와 unkwown의 차이점이란?

any와 unknown의 차이점은 타입과 관련해서 차이점이 있다. 예를 들어 다음과 같은 코드가 있다고 하자.

let notSure: unknown;
notSure = 1;
notSure = "maybe a string instead";

let anyType: any;
anyType = notSure;

let numberType: number;
numberType = notSure; (결과는 ?)

위 코드의 결과는 컴파일 에러가 발생한다. 그 이유는 unknown의 경우 "unknown"이라는 타입이 존재하지만 any의 경우 "int , string ..." 등 여러 타입으로 대체된다는 것이다. 즉 이 점에서 unknown과 any가 차이점이 발생한다. 그렇다면 unknown은 왜 생겨났을까? 왜 "unknown"이라는 타입을 가지고 있을까? 이는 사실 any의 단점을 보완하기 위해서 이다. any의 경우 어떤 타입이든 가능하다보니 자바스크립트와 다른 점이 없다. 이 말을 즉, 예상치 못한 에러가 발생할 수 있다는 의미이고 이는 결국 typescript를 사용하는 이유를 찾지 못하는 다는 것이다. 따라서 이런 단점을 보완하기 위해서 unknown이라는 타입을 만들었다. unknown의 경우 unknown이라는 타입이 정해져있기 때문에 앞서 설명한 자바스크립트의 한계점들을 보완할 수 있다.