javascript는 C, Java등과 같은 언어와 구별되는 아래와 같은 특성이 있다.
- Prototype-based Object Oriented Language
- Scope와 this
- 동적 타입(dynamic typed) 언어 혹은 느슨한 타입(loosely typed) 언어
이와 같은 특성때문에 C, Java등에 익숙한 개발자를 혼란스럽게 하고 코드가 복잡해질 수 있고 디버그와 테스트 공수가 증가하는 등의 문제를 일으킬 수 있다.
이런 Javascript의 문제를 극복하고자 Typescript가 만들어지게 되었다.
Prototype-based Object Oriented Language
프로토타입 기반 객체 지향 언어는 클래스 기반 언어에서 상속을 사용하는 것과 다르게, 객체를 원형으로 하여 복제의 과정을 통하여 객체의 동작방식을 다시 사용할 수 있다.
이러한 방식 때문에 개발자들은 Javascript로 프로그래밍을 하면 타입, 메모리 등과 같이 실제 구현하고 싶은 로직과는 거리가 먼 부분들을 생략할 수 있다. 또한, 프로그램의 표현식을 구성하는 기본적인 문법이 다른 언어와 비교해 단순하고, 함수형 언어의 높은 표현력을 사용할 수 있고, JSON이라는 강력한 표현력 및 범용성을 가진 데이터 구조가 기본 데이터 구조라는 것이 Javascript의 장점 중 중요한 요소라고 할 수 있다.
하지만 이러한 특성 때문에 프로젝트가 진행될수록 Javascript만으로 작성된 프로그램이 개발자의 의도대로 동작하는지를 확인하기 힘들다.
내가 작성한 프로그램이 무슨 의미인지 파악하기 힘들다는 것은 개발자에게 수많은 비용 낭비를 일으키는 단점이다.
동적인 자바스크립트를 정적으로
const sum = (a, b) => a + b;
plus(1, 2); // 3
plus(2, "hi"); // "2hi"
위와 같은 경우에 개발자의 의도는 숫자 2개를 인자로 받아 그 합을 반환하는 함수였지만, 코드상으로는 어떤 타입의 인수를 전달하야여 하는지, 어떤 타입의 반환값을 리턴해야 하는지 명확하지 않다. 따라서 오류를 예측하지 않은 값이 반환될 수 있는 함수이다.
const sum = (a:number, b:number) => a + b;
타입스크립트에서는 위와같이 인자로 받는 값들을 타입을 명시하여 잘못된 값이 들어왔을 때 에러를 반환하도록 할 수 있다.
아직까지 Javascript를 막 엄청 잘 아는 것도 아니고 Typescript를 쓰는 이유에 대해서 조금은 안 것 같지만 우선은 써보자. 쓰면서 의문점들이 해결될것이다.
Typescript 한글 문서도 매우 잘되어있다.
https://typescript-kr.github.io/