면접을 준비하면서 any
타입과 unknown
타입에 대해서 설명해 달라는 질문을 받았었다. 고작 1주일만에 프로젝트를 완성하면서 타입스크립트를 사용했기 때문에 실상 any
타입은 사용해보았지만 unknown
타입은 사용해 보기는 커녕 완전히 처음 듣는 타입이었다. 그럼 이제라도 알아보자
TypeScript에서 any
타입과 unknown
타입은 둘 다 어떤 값이든 할당할 수 있는 자유로운 타입이다.
프로젝트를 진행하면서 타입이 어정쩡 하거나 어떻게 해야할지 모를때 일단 any
를 박으면 어떻게 잘 넘어가는 경우가 존재하는데, 사실상 any
타입을 과도하게 사용하게 되면 타입스크립트의 이 점을 버리고 코드만 길어진 자바스크립트를 쓰는것이나 다름없다.
어쨋거나 any
타입과 unknown
타입은 둘 다 비슷한 기능을 한다. 그럼 차이점이 있을 것이고, 후속으로 나온 타입이 나오게 된 배경이 존재할 것이다. 그것에 대해 알아 보자.
가장 큰 이유는 먼저 출시된 any
타입이 너무 과하게 수용적이라는 부분에서 출발된 것 같다.
any
타입의 문제점은 코드의 가독성과 유지보수성을 떨어뜨리며, 컴파일러가 타입 검사를 수행하지 않기 때문에 런타임 에러가 발생할 가능성이 높다고 한다. 따라서 개발자는 코드의 안정성을 보장하기 위해 any
타입 대신 더욱 안전하고 타입 안정성이 보장된 타입을 사용해야 되게 되었고, 이에 따라서 TypeScript 3.0부터 unknown
타입이 추가되었다.
unknown
타입은 any
타입과 마찬가지로 어떤 값이든 할당할 수 있지만, 할당된 값의 타입이 무엇인지 컴파일러가 알지 못한다. 따라서 unknown 타입의 값에는 직접 접근할 수 없으며, 아예 타입 검사를 실행하지 않는 any
타입과 다르게 unknown
타입은 먼저 해당 값이 어떤 타입인지 검사해야 한다.
이를 위해 unknown
타입의 값을 사용할 때는 타입 단언(type assertion)이나 타입 가드(type guard)를 사용하여 타입 검사를 수행해야 한다고 한다.
any
타입의 값은 어느 타입의 변수에도 할당될 수 있으나, unknown
타입의 값은 any와 unknown 타입을 제외한 타입의 변수에는 할당이 불가능하다.
결론적으로 unknown
타입은 any
타입과 비슷하지만, 할당된 값의 타입을 알 수 없기 때문에 코드의 안정성을 더욱 보장할 수 있다. 따라서 unknown
타입을 사용하면 any
타입보다 더욱 타입 안정성이 높은 코드를 작성할 수 있다.