익숙한 타입스크립트
한국외대 융복합소프트웨어를 전공하면서 다양한 프로그래밍 언어를 배웠다. 처음 배운 언어는 C 언어이다. 그리고 Python, Java 순으로 배웠다. 자료구조와 알고리즘을 C언어로 배운 만큼 타입을 정하는 게 익숙했다.
Javascript는 동아리 프로젝트를 하면서 처음 봤다. int, str 같은 타입 선언은 없고 var, let, const 가 전부인 언어였다. 처음에는 정말 당황스러웠지만 지금 거의 2년 넘게 써오면서 Javascript의 이런 황당한 타입 선언?은 오히려 편해졌다.
Express.js와 React.js를 작년부터 공부하고 있었다. Typescript는 웹 프로그래밍 강의로 유명한 노마드 코더의 유튜브 동영상인 '타입스크립트 + 리액트 조합이 꿀인 이유'를 보고 알게 되었다. Javascript와 비슷하지만, Typescript 타입 선언은 익숙하면서도 신선하게 느껴졌다. 바로 노마드 코더 니콜라스 선생님에게 'Typescript로 블록체인 만들기'를 수강하면서 관심을 키웠다.
타입스크립트가 그래서 뭔데?
타입스크립트 홈페이지는 타입 기능을 더한 자바스크립트로 타입스크립트를 소개한다.
TypeScript extends JavaScript by adding types
또 일반 자바스크립트로 컴파일되는 타입 기능이 있는 자바스크립트 상위 호환 언어로 보면 된다.
A typed superset of Javascript that compiles to plain Javascript
Typescript = Javascript + A type system 인 셈이다.
타입스크립트는 2012년 하반기 마이크로소프트에서 출시하고 지금까지 잘 관리하고 있는 언어이다.
Google에는 Golang이 있다
취준생 입장에서 보면 Java 공화국인 우리나라에서 Javascript는 웹 서비스에 국한되어 사용되고 있다. 서버 사이드에서 사용되는 Node.js는 애플리케이션 규모가 작은 경우나 스타트업에서 주로 사용된다. 자바스크립트의 동적타이핑과 약 타입(실행 도중 타입이 변하는 경우, weakly typed)은 프로젝트가 복잡해지거나 팀 규모가 커지면 문제가 발생한다. 작성자와 사용자 사이의 의사 소통 문제가 발생하기도 하고
"이거 타입이 문자열 아니었어?"
같은 이유로 유지보수 힘들어진다. 하지만 타입스크립트는 자바스크립트와 다르게 대규모 애플리케이션 개발을 위해 만들어지고 정적 타입 기능을 제공한다.
3 + [9] = "39" WTF!
자바스크립트에서 3 + [9] 는 문자열 '39' 다....
정말 말도 안 되는 상황이다.
타입스크립트는 타입 안정성(type safety)을 가지고 있다.
타입 안정성은 타입을 이용해 프로그램이 유효하지 않은 작업을 수행하지 않도록 방지한다.
- 1 + []
- '5' / 2
에서 자바스크립트는 "1", "2.5"로 계산한다.. 하지만 타입스크립트는 바로 에러가 발생했다고 에디터에서 빨간줄을 자비없이 그어버린다. 이런 에러 메시지는 확실하게 오류가 발생하는 경우를 줄여준다!
타입스크립트는 타입을 명시하거나 추론하는 방식을 선택해서 사용 할 수 있다!
/// 타입 명시
const add = (num1: number, num2: number): number => {
const result: number = num1 + num2
return result
}
/// 타입 추론
const add = (num1: number, num2: number) => {
const result = num1 + num2
return result
}
타입스크립트 VS 자바스크립트
|
타입스크립트 |
자바스크립트 |
타입 |
정적 |
동적 |
자동 변환 |
O |
X |
타입 확인 시기 |
실행 중 |
컴파일 중 |
에러 검출 시기 |
실행 중 |
컴파일 중 |
Typescript는 서버에서 어떻게 사용될까?
A progressive Node.js framework for building efficient, reliable and scalable server-side applications.
Deno is a simple, modern and secure runtime for JavaScript and Typescript that use V8 and is built in Rust.
Reference