바닐라 자바스크립트의 함정
값 비싼 자유
자바스크립트는 사실상 코드를 구성하는 방법에 제한이 없기때문에, 다른 보통의 언어들과는 달리 충돌 가능성을 먼저 확인하지 않고, 코드를 실행하는 동적(dynamic) 타입 언어
. 이러한 이유 때문에 코드의 자유는 자바스크립트를 재미있게 만들기도 하지만, 코드를 안전하게 실행 하려고 할 때는 고통을 안겨줍니다.
부족한 문서
자바스크립트 언어 사양 ( 스펙 ) 에는 함수의 매개변수, 함수 반환, 변수 또는 다른 구성요소의 의미를 설명하는 표준화된 내용이 없다. 이 때문에 많은 개발자가 블록 주석을로 함수와 변수를 설명하는 JSDoc
표준을 채택했다.
/**
* Performs a painter painting a prticular painting.
*
* @param {Painting} painter
* @param {string} painting
* @returns {boolean} Whether the painter painted the painting
*/
function paintPainting(painter, painting) {
/* ... */
}
하지만 JSDoc
에는 다음과 같은 주요 문제로 인해 규모가 있는 코드베이스에서 사용하기 불편하다.
- JSDoc 설명이 코드가 잘못되는 것을 막을 수 없다.
- JSDoc 설명이 이전에는 정확했더라도 코드 리팩터링 중에 생긴 변경 사항과 관련된 현재 유효하지 않은 JSDoc 주석을 모두 찾기란 어렵다.
- 복잡한 객체를 설명할 때는 다루기 어렵고 장황해서 타입과 그 관계를 정의하려면 다수의 독립형 주석이 필요하다.
수십개의 파일에서 JSDoc 주석을 유지 관리하는데는 적합하겠지만, 수천개의 파일을 꾸준히 업데이트 하기란 어려운 일이다.
부족한 개발자 도구
자바스크립트는 타입을 식별하는 내장된 방법을 제공하지 않고 코드가 JSDoc 주석에서 쉽게 분리되기 때문에 코드베이스에 대한 대규모 변경을 자동화 하거나 통찰력을 얻기가 매우 어렵다.
타입스크립트에 대한 오해
잘못된 코드 해결책
타입스크립트는 자바스크립트 코드를 구조화 하는데 도움이 되지만, 타입 안정성 강화를 제외하고는 해당 구조가 어떻게 보여야 하는지에 대해서는 어떤 것도 강요하지 않는다. ( 장점
)
타입 스크립트는 특정 대상만이 아닌 모든 개발자가 사용할 수 있는 프로그래밍 언어이다.
자바스크립트에서 사용되는 어떠한 아키텍쳐 패턴 중 무엇이든 사용하여 코드를 작성할 수 있고, 타입스크립트가 이를 지원한다.
자바스크립트로의 확장
타입스크립트이 실제 목표
- 현재와 미래의 ECMA스크립트 제안에 맞춘다.
- 모든 자바스크립트 코드의 런타임 동작을 유지한다.
타입스크립트는 자바스크립트의 동작 방식을 전혀 변경하지 않는다.
자바스크립트보다 느림
타입스크립트 코드를 빌드하는데 시간이 조금 더 걸린다.
브라우저나 Node.js와 같은 환경에서 실행되기 전에 자바스크립트로 컴파일 되어야 한다.
빌드 파이프라인은 대부분 성능저하를 무시하도록 설정된다. 코드에서 발생할 수 있는 오류를 분석하는 느린 타입스크립트 기능은 실행 가능한 애플리케이션 코드 파일을 생성하는 것 과는 분리된 채로 수행된다.
진화가 끝남
웹의 진화는 끝나지 않았고, 타입스크립트도 마찬가지이다.
웹 커뮤니티는 타입스크립트에 버그 수정과 기능 추가를 지속적으로 요청하고, 이 책에서 배우는 타입스크립트의 기본 원칙과는 거의 변함이 없지만, 오류 메시지 더 멋진 기능 그리고 편집기 와의 통합은 지속적으로 개선될 것
요약
- 자바스크립트의 간략한 역사
- 자바스크립트의 함정 : 비싼 자유, 부족한 문서, 부족한 개발자 도구
- 프로그래밍 언어, 타입 검사기, 컴파일러 및 언어 서비스 역할을 하는 타입스크립트
- 타입스크립트의 장점 : 제한을 통한 자유로움, 정확한 문서화, 강력한 개발자 도구
- 타입스크립트 플레이그라운드 및 컴퓨터에서 로컬로 타입스크립트 코드 작성하기
- 타입스크립트에 대한 오해: 잘못된 코드 해결책, 자바스크립트로의 확장, 자바스크립트보다 느림, 진화가 끝남