# 1. 타입스크립트 탄생 배경
자바스크립트는 일주일만에 생겨난 언어라는 말이 있다.
자바스크립트는 초기에 브라우저에서 HTML, CSS의 한계를 극복하고자 간단한 프로그래밍 동작을 수행하기 위해 만들어졌다.
애초에 간단한 기능만 수행하기 위해 만들어지다보니 제약이 없고, 언어차원에서 많은 기능을 제공할 필요도 없었다.
그러나, 웹 시장이 급격히 발전하기 시작하면서 브라우저에서 많은 동작이 필요하게 되었고, 애플리케이션의 복잡도가 올라가면서 복잡성이 높은 애플리케이션을 설계할 수 있는 능력을 갖추게 되었다.
웹 시장이 발전하면서 많은 개발자가 자바스크립트에 익숙해졌고, 다른 시장에서도 자바스크립트를 활용하고자 하는 수요가 늘었다.
이 수요에 맞춰 브라우저 밖에서도 자바스크립트를 실행할 수 있는 Node.js가 탄생하게 되었고, React Native등의 프레임워크를 통해 데크탑, 모바일 애플리케이션도 개발 가능하게 되었다. 이런 상황에서 ECMAScript는 주기별로 새로운 문법을 계속해서 발표했지만, 최초의 근본적인 설계 자체가 빠르게 개발하기 위해 유연하게 만들어졌다는 특성때문에 많은 부작용을 가져왔다.
이런 상황에서 타입스크립트가 탄생한다. 타입스크립트는 자바스크립트에 타입 문법을 추가해서 만든 슈퍼셋이다.
슈퍼셋이란 기존 자바스크립트에다가 추가적인 기능을 추가했다는 의미이다.
이런 타입시스템이 가지는 장점으로 인해 자바스크립트보다 많이 쓰이는 추세가 되었다.
# 2. 타입스크립트 사용 이유
타입스크립트를 사용하는 이유는 크게 안정성, 표현력, 객체 지향 프로그래밍(OOP) 3가지 이다.
1. 안정성
타입스크립트는 정적타입 언어, 컴파일 언어라는 2가지 특성으로 인해 안정성이 높다.
타입스크립트는 다른 컴파일 언어와 달리 자바스크립트로 컴파일된다.
정적타입이란?
모든 변수를 선언하는 시점부터 해당 변수의 타입을 반드시 지정해주어야하며,
지정된 타입을 벗어나는 값은 해당 변수에 할당할 수 없도록 만들어진 언어.
이를 강타입 언어 또는 정적타입이라고 부른다.
컴파일 언어란?
컴파일이라는 것은 특정한 언어를 다른 언어로 변환하는 것으로 흔히 번역기와 같은 개념이다.
자바스크립트는 컴파일이 필요없는 인터프리터 언어로서, 코드를 작성하고 바로 실행할 수 있다.
하지만 컴파일언어들은 반드시 실행 전 컴파일 과정을 거쳐 다른 형식의 언어로 변환된 후 실행해야한다는 특징을 가진다.
타입스크립트의 타입 지정 문법은 아래와 같다.
// 변수
// 변수명: 타입명 = 할당될 값;
let age:number = 1;
위와 같이 코드를 작성하면 age라는 변수는 number 타입의 값밖에 할당하지 못한다.
따라서 아래와 같이 코드를 작성하면 에러가 발생한다.
// 변수
// 변수명: 타입명 = 할당될 값;
let age:number = 1;
age = "2";
이렇게 지정된 타입을 벗어난 경우 에러를 발생시켜주기에, 실수로 다른 타입의 값을 할당하거나 다른 타입에서 사용할 수 있는 메서드들을 활용하는 경우를 미연에 방지한다.
또한 에러를 발생시키는 시점이 중요한데, 실제 유저가 애플리케이션을 실행하는 과정에서 타입 에러가 발생하여 애플리케이션이 예기치않게 종료된다면 안정성이 매우 떨어진다고 볼 수 있다.
그러나 타입스크립트는 컴파일 언어이기 때문에, 먼저 자바스크립트언어로 컴파일 되어, 컴파일 시점에 에러를 발견할 수 있다.
이러한 특징으로 인해 타입스크립트는 '안전하다'라고 할 수 있다.
2. 표현력
타입스크립트이 진정한 효용은 표현력 증대에 있다.
타입은 '추상'과 '구체'를 구분짓고, '추상' 만으로 코드를 읽고 이해하고, 상호 소통하도록 할 수 있다.
추상 vs 구체
추상 : 코드의 겉으로 보이는 동자. 이 코드가 "무엇을 한다"를 표현
구체: 이 코드가 "어떻게 동작을 수행한다"를 표현
코드를 작성하고 기능을 돌아가게 하기 위해서는 반드시 구체적인 동작의 수행방법을 코드로 기입해야하지만, 추후에 그 코드를 사용하는 입장에서는 사실 구체적으로 어떻게 수행하는지에 대한 정보는 가치가 상대적으로 낮거나, 때로는 알 필요가 없다.
코드를 사용하는 입장에서는 이 코드가 무엇을 하는지(추상)만 알면 되지 어떻게의 동작(구체)을 수행하는지는 몰라도 된다.
타입스크립트에서 함수의 타입은 아래와 같이 지정할 수 있다.
function sum(인자: 인자의 타입):함수의 리턴 타입 {
}
function sum(x:number, y:number):number {
return x + y;
}
sum이라는 함수는 x, y라는 인자를 받으며 두 인자는 모두 number 타입이다. 그리고 number 타입의 값을 리턴한다.
이러한 정보를 타입을 통해서 알 수 있다.
이 함수의 구현은 어떻게 이루어졌는지 전혀 신경쓸 필요가 없으며, 개발자는 함수의 이름, input의 타입, output의 타입을 통해서 이 함수가 어떤 동작을 하는지 유추하고 파악할 수 있다. 그리고 이 정보만으로도 충분히 sum 함수를 사용할 수 있게 된다.
이것이 타입 시스템이 가진 표현이라고 할 수 있다.
3. 객체 지향 프로그래밍(OOP)
타입스크립트를 사용하면 객체지향 프로그래밍이 가능하다.
OOP를 통해 모듈성, 재사용성, 확장성, 유지보수성을 가지며 이러한 이유로 생산성을 높이고, 높은 퀄리티, 빠르게 개발할 수 있다는 장점도 있다.
# 3. 마무리
어떤 언어, 라이브러리, 프레임워크 등을 배우기 전에 이것을 왜 배워야하는지, 이것이 가져다주는 이점이 무엇인지 공부하는 것은 그 시스템을 이해하는데 있어서 중요한 요소인 것 같다!
'Typescript' 카테고리의 다른 글
타입 별칭, 유니온타입(or), 인터섹션타입(&) 사용법 (0) | 2023.04.23 |
---|---|
Typescript 환경설정 및 tsconfig.json 옵션에 대해서 알아보자! (0) | 2023.04.12 |