[TS] 드디어 타입스크립트 | 왜? any는 안되는데?

준리·2023년 1월 9일
1
post-thumbnail

시간이 없다는 핑계로, javascript의 장점을 최대한 활용해야한다는 핑계로, 타입스크립트를 제대로 공부하고 사용해볼 기회를 미뤘다.
하지만 여러 프로젝트를 겪으며, 생각이 바뀌게 되었다. string number 값의 인자나 매개변수의 타입을 잘못 입력하는 실수를 경험하고 그 실수를 잡기 위해 나를 자책하고, 오히려 더뎌지는 개발속도를 보았을 때 타입스크립트를 적용해야겠다고 생각했다.

🧀 왜? 타입스크립트

먼저 타입스크립트란 무엇인가? javascript의 superset으로 더 강력한 type checker 기능을 제공한다. 절차형 언어에서 주로 사용하던 타입 정의 기능이 꼭 javascript에서 필요했을까?

  1. typescript는 javascript에 추가적인 구문을 추가하여 editor와의 단단한 통합을 지원한다. 따라서 editor에서 초기에 오류를 잡을 수 있게 된다.

  2. typescript 코드는 javascript가 실행되는 모든 곳(브라우저 Node.js 등)에서 javascript로 변환 될 수 있다.

  3. typescript는 javascript를 이해하고 타입 추론(type inference)을 사용하여 추가 코드 없이도 훌륭한 도구를 제공한다.

그래서?

결론적으로 자바스크립트를 더 잘 사용할 수 있게 된다.

  • 언어가 예측가능하고,
  • 알기 쉬운 코드를 작성하게 된다.
  • 런타임 에러가 줄어들며,
  • 유지보수가 쉬워지고, 협업에 더 나은 주석이 되기도하고 이로서 생산성이 높아지게 된다.

🫡 멍청한 실수로부터 개발자를 보호해준다.

🧀 anyscript | 꿀인데?

typescript가 좋다고들하는데, 회사에서 기본으로 채택한 언어라서 일단 시작하게 된다.
하지만 우리는 typescript를 제대로 공부하지 않고 시작했기 때문에 any 타입의 구원을 받는다.

타입스크립의 타입 시스템은 점진적(gradual)이고 선택적(optional)이다. 코드에 타입을 조금씩 추가할 수 있기 때문에 점진적이며, 언제든지 타입 체커를 해제할 수 있기 때문이 선택적이다. 이 기능들의 핵심은 any 타입이다.

일단 모른다 싶으면 any 타입을 때려박는다. 나중에 수정해야지 룰루 하면서...

let age: number;
age = '12';

age = '12' as any // OK

오! 난 typescript를 쓰고도 typescript를 제대로 사용하지 못했다.
타입 선언을 추가하는 데 시간을 쏟고 싶지 않아서 any 타입이나 타입 단언문 (as nay)을 사용하고 싶어했다.

그러나 일부 특별한 경우를 제외하고는 any를 사용하면 타입스크립의 수많은 장점을 누릴 수 없다.

  1. any 타입에는 타입 안정성이 없다.
    위 코드에서 1을 더해보자
    age += 1; // runtime pass, age="121"
    미친 값이 나오게 된다.
  1. any는 함수 시그니처를 무시해 버린다.
    함수가 지정한 시그니처를 무시해서 인자를 넣을 수 있다. 어마무시하다.

  2. any 타입에는 언어 서비스가 적용되지 않는다.
    자동완성기능과 적절한 도움말을 제공하고 확장의 경험을 개발자에게 적용하는데, any는 걍 무시한다.

  3. any는 타입 설계를 감춰버린다.
    분명 상태 같은 객체를 정의하려면 엄청 복잡할 것이다. 그래서 우린 any를 일단 넣어놓는다.
    하지만 깔끔하고 명료한 코드 작성을 위해 제대로 된 타입 설계는 필수이다. any 타입을 사용하면 타입 설계가 불분명해지고, 동료와의 협업에서도 코드를 다 읽어봐야하는 등의 설계문제가 낱낱이 보일 것이다.

  4. any는 타입시스템의 신뢰도를 떨어뜨린다.
    사람은 항상 실수를 한다. 보통 타입 체커와의 협업으로 코드의 신뢰도를 높인다. any타입을 쓰지 않으면 런타임에 발견될 오류를 미리 잡고 신뢰도를 높일 수 있다.

🧀 이래도 any를 씁니까?

any 타입을 사용하면 타입 체커와 타입스크립트 서비스를 무력화시킨다. any타입은 진짜 문제점을 감추고, 개발 경험을 나쁘게 하고 타입 시스템의 신뢰도를 떨어뜨린다.

사실 코드량이 적을 때 type을 정의하는게 최선이라는 것을 안다. 복잡해지고 길어질수록 머리 속으로 그 type을 기억하기 쉽지 않기 때문이다.
이 모든 것을 게으름 때문이니, 나중에 게으름을 피우기 위해 any를 피하고 type을 잘 설계해놓자.

anyscript는 이제 그만.

참고자료

  • 노마드코더
  • 이펙티브 타입스크립트
profile
트렌디 풀스택 개발자

0개의 댓글