Cherry & Cherish
[TS] Any 타입을 왜 쓰면 안될까? 본문
이 글은 이펙티브 타입스크립트 1장 ‘타입스크립트 알아보기’ 중 아이템5 ‘any 타입 지양하기’를 바탕으로 작성되었습니다.
Any 타입 지양하기
타입스크립트로 코드를 짜다보면, 모르는 타입이 발생할 것이고, 이때 우리는 큰 고민에 빠진다. any 타입을 그냥 사용한다면, 10초면 해결될 문제인데, 타입 선언을 추가하면 한 참 동안 문제 해결 과정을 겪어야 하기 때문이다.
이런 고민의 상황에서 손쉽게 any 타입을 선택하면 안되는 이유에 대해 설명하고자 한다.
TypeScript를 사용한다면 반드시 Any 타입을 지양하자!
- 타입스크립트의 타입 시스템은 gradual하고, optional하다.
- 점진적이다 - 코드에 타입을 조금씩 추가할 수 있다.
- 선택적이다 - 언제든지 타입체커를 해제할 수 있다.
- any 타입은 as any 를 사용해서 선언한다.
- 주로, 타입 선언을 추가하는데 시간을 쏟고 싶지 않을 때 사용하는편이 일반적이다.
- 하지만, 특수한 경우를 제외하곤 any 타입을 사용하지 않는 것이 좋다. 그 이유는 아래와 같다.
1. any 타입에는 타입 안정성이 없다.
- number, string 타입 등에 대한 구분이 완전하지 않게 된다, 혼돈이 발생할 수 있다.
- 쉽게 설명해 ‘1’과, 1은 다른 타입인데, any를 사용한다면 둘 중 아무거나 할당되어도 상관없다고 인식할 것이다.
2. any는 함수 시그니처(약속)를 무시해 버린다.
- any 타입을 사용하면 함수의 약속이 모호해진다.
- 약속된 타입의 입력이 함수에 들어가면, 함수는 약속된 타입의 출력을 반환해야 하기 때문이다.
3. any 타입에는 언어 서비스가 적용되지 않는다.
- 타입스크립트는 자동완성, 도움말, 이름변경 등의 언어 서비스를 제공한다.
- 그러나 any 타입을 사용하게 되면 이런 언어 서비스를 제공받지 못한다.
- 타입스크립트는 ‘확장 가능한 자바스크립트’다. 언어 서비스를 제대로 누리지 못한다면, 생산성이 저하된다.
4. any 타입은 코드 리팩터링 때 버그를 감춘다.
- any를 사용하면 당장 급한불을 끄는 것과 같이 타입 체커를 통과하게 된다.
- 그러나, 타입체크를 통과했다고 오류가 없는 것이 아니다.
- 일부 경우에는 타입 체커를 통과 했음에도, 런타임 오류가 발생할 것이다.
5. any 타입은 타입 설계를 감춰버린다.
- 갈끔하고 정확하고 명료한 코드 작성을 위해 제대로된 타입 설계는 필수적이다.
- 그러나 any타입을 사용하면 타입 설계가 불분명해진다.
- 설계가 어떻게 되었는지, 잘 되었는지 모니터링이 불가능하기 때문이다.
- 만약 동료의 코드를 검토해야 한다면, 큰 문제가 발생할 것이다.
6. any는 타입시스템의 신뢰도를 떨어뜨린다.
- 상식적인 이야기다.
- any타입을 쓰지 않으면 런타임에 발견될 오류를 미리 잡을 수 있고, 신뢰도를 높일 수 있다.
- 타입스크립트를 사용하는 이유다.
- any를 무분별하게 사용하면, 어떤 코드에서 오류가 발생했는지 알 수 없어, 자바스크립트보다 더 어렵게 만들기도 한다.
반드시 any를 써야만 하는 상황이라면?
- 어쩔 수 없이 any를 써야만 하는 상황이 있다.
- 이럴 때는 any의 단점을 보완해서 사용해야 한다.
- 단점을 보완하는 방법과, 좋지 못한 방법이 있다.
- any의 단점을 보완하는 방법은 5장에서 설명된다.
'Programming > TypeScript' 카테고리의 다른 글
[TypeScript] 문서에 타입 정보를 쓰지 않기 (0) | 2023.04.25 |
---|---|
[TypeScript] 타입 연산과 제너릭 사용으로 반복 줄이기 (0) | 2023.04.22 |
[TypeScript] 타입과 인터페이스의 차이점 알기 (0) | 2023.04.20 |
[TypeScript] 함수표현식에 타입 적용하기 (0) | 2023.04.17 |
[TypeScript] 잉여 속성 체크란 무엇일까? (0) | 2023.04.14 |
Comments