-
타입스크립트 입문Typescript 2021. 1. 28. 21:00
자바스크립트는 유연한 언어다. 개발자가 실수로 이상한 코드를 작성해도 암묵적 타입 변환을 수행한다.
5 + [] // 문자열 "5"로 평가 const myObj = {} myObj.a // undefined 평가
이렇게 이상한 코드를 입력해도 자바스크립트는 에러를 던지지 않는다. 이런 유연함 때문에 개발 중 실수로 입력한 코드로 프로그램이 망가졌을 때, 언제 어디서 실수를 했는지 찾기가 어렵다. 타입스크립트를 사용하면 이런 실수를 사전에 차단할 수 있다. 자바스크립트는 프로그램을 실행할 때 사용자의 실수를 알려주는 반면, 타입스크립트는 개발자가 텍스트 편집기에 코드를 입력하는 즉시 에러 메시지를 발생시키기 때문이다.
타입스크립트 컴파일러(TypeScript Compiler, TSC)
개발자가 작성한 텍스트 파일이 모여 하나의 프로그램이 된다. 프로그램을 실행한다는 것은 컴파일러라는 특별한 프로그램에게 일을 주는 것과 같다. 컴파일러는 개발자가 작성해 놓은 코드들을 파싱 하여 추상 문법 트리(abstract syntax tree, AST)라는 자료구조로 변환한다. 그리고 다시 AST를 바이트코드(bytecode)라고 하는 하위 수준의 표현으로 변환한다. 이후, 런타임(runtime)이라 불리는 프로그램에 바이트코드를 입력해 평가하고 결과를 얻는다.
프로그램의 실행 과정 : 프로그램이 AST로 파싱된다 -> AST가 바이트코드로 컴파일된다 -> 런타임이 바이트코드를 평가한다
프로그래밍 언어는 각자의 타입 시스템을 가지고 있다. 보통 어떤 타입을 사용하는지 컴파일러에게 명시적으로 알려주는 타입 시스템, 자동으로 타입을 추론하는 타입 시스템으로 구분된다. 타입스크립트는 두 가지 방식을 모두 활용한다.
어노테이션을 이용해서 타입스크립트에 명시적으로 타입을 지정할 수 있다.
let candys: number = 1 // candys는 number 타입
또는 스스로 타입을 추론하게 할 수 있다.
let candys = 5 // candys는 number 타입
자바스크립트의 타입 확인은 런타임에, 타입스크립트는 컴파일 타임에 이루어진다. 자바스크립트가 프로그램을 실행해야만 특정 데이터의 타입을 알 수 있는 반면(동적 타입 바인딩;dynamic type binding), 타입스스크립트는 점진적으로 타입을 확인(gradually typed)한다. 컴파일 타임에 프로그램의 모든 타입을 알고 있을 때 가장 좋은 결과를 보여줄 수 있지만, 프로그램을 컴파일 할 때 꼭 모든 타입을 알아야 하는 것은 아니다. 타입이 지정되지 않은 프로그램이라도 일부 타입을 추론해서 오류를 검출해줄 수 있는데, 모든 타입을 알지 못하는 상황에서는 프로그램을 실행할 때 많은 오류가 발생할 수 있는 여지를 안게 된다. 따라서 모든 코드의 타입을 컴파일 타임에 지정하는 것이 좋다.
타입 확인을 컴파일 타임에 한다는 것은, 개발자가 실수로 이상이 있는 코드를 입력한 경우에는 컴파일이 제대로 이루어지지 않는다는 것을 뜻한다. 프로그램을 실행하기 전 단계인 컴파일 타임에 에러를 검출하기 때문에 개발 단계에서 오류를 쉽게 잡아낼 수 있는 것이다.
타입(Type)
타입은 값과 이 값으로 할 수 있는 일의 집합이라고 정의할 수 있다.
예)
- Boolean 타입 : true, false 또는 boolean에 수행할 수 있는 모든 연산(||, &&, ? 등)의 집합
- number 타입 : 모든 숫자와 숫자에 적용할 수 있는 모든 연산(+, - 등), 숫자에 호출할 수 있는 모든 메서드(.toFixed, toString 등)의 집합
function square(n: number) { // 어노테이션을 이용해 매개변수 n의 타입을 number로 제한 return n * n } square(3) // 9 square('갑자기 분위기 문자열') // 타입 에러
위 예에서 타입 어노테이션으로 함수 square의 매개변수 n의 타입을 number로 제한했다. 타입스크립트는 이 함수를 호출할 때 호환이 되는 인수로 호출했는지 판단하고, 엉뚱한 타입이 왔을 때 에러를 발생시킨다.
---
참고자료 : 타입스크립트 프로그래밍(보리스 체르니)
'Typescript' 카테고리의 다른 글
타입스크립트 - 호출 시그니처, 제네릭 (0) 2021.02.17