any타입과 unknown타입은 무엇이 다를까?

권태형·2023년 2월 25일
0

지식정리

목록 보기
5/72
post-thumbnail

면접을 준비하면서 any타입과 unknown타입에 대해서 설명해 달라는 질문을 받았었다. 고작 1주일만에 프로젝트를 완성하면서 타입스크립트를 사용했기 때문에 실상 any타입은 사용해보았지만 unknown타입은 사용해 보기는 커녕 완전히 처음 듣는 타입이었다. 그럼 이제라도 알아보자

any타입과 unknown타입은 뭘까

TypeScript에서 any 타입과 unknown 타입은 둘 다 어떤 값이든 할당할 수 있는 자유로운 타입이다.

프로젝트를 진행하면서 타입이 어정쩡 하거나 어떻게 해야할지 모를때 일단 any를 박으면 어떻게 잘 넘어가는 경우가 존재하는데, 사실상 any타입을 과도하게 사용하게 되면 타입스크립트의 이 점을 버리고 코드만 길어진 자바스크립트를 쓰는것이나 다름없다.

어쨋거나 any타입과 unknown타입은 둘 다 비슷한 기능을 한다. 그럼 차이점이 있을 것이고, 후속으로 나온 타입이 나오게 된 배경이 존재할 것이다. 그것에 대해 알아 보자.

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 타입보다 더욱 타입 안정성이 높은 코드를 작성할 수 있다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글