ts-for-jsdev
  • 자바스크립트 개발자를 위한 타입스크립트
  • 들어가며
  • 01 타입스크립트 소개
    • 1.0 들어가며
    • 1.1 정적 타입 분석
    • 1.2 왜 타입스크립트인가
    • 1.3 타입스크립트의 구성요소
    • 1.4 타입스크립트의 역사
  • 02 ECMAScript
    • 2.0 ECMAScript
    • 2.1 블록 수준 스코프
      • 2.1.1 let을 이용한 선언
      • 2.2.2 const를 이용한 선언
      • 2.2.3 스코프 베스트 프랙티스
    • 2.2 객체와 배열
      • 2.2.1 비구조화 할당
      • 2.2.2 나머지 연산자와 전개 연산자
      • 2.2.3 객체 리터럴 변경사항
    • 2.3 함수
      • 2.3.1 기본 매개변수
      • 2.3.2 화살표 함수
    • 2.4 템플릿 리터럴
      • 2.4.1 멀티라인 문자열
      • 2.4.2 문자열 치환
    • 2.5 원소 순회
      • 2.5.1 forEach 메소드
      • 2.5.2 for-of 문법
      • 2.5.3 이터레이터 프로토콜
      • 2.5.4 이터러블 프로토콜
    • 2.6 비동기 처리
      • 2.6.1 프로미스
      • 2.6.2 Async / Await
    • 2.7 맺으며
  • 03 타입스크립트 기초 문법
    • 3.0 타입스크립트 기초 문법
    • 3.1 기본 타입
    • 3.2 배열과 튜플
    • 3.3 객체
    • 3.4 타입 별칭
    • 3.5 함수
    • 3.6 제너릭
    • 3.7 유니온 타입
    • 3.8 인터섹션 타입
    • 3.9 열거형
  • 04 인터페이스와 클래스
    • 4.0 들어가며
    • 4.1 인터페이스 기초
    • 4.2 색인 가능 타입
    • 4.3 인터페이스 확장
    • 4.4 클래스
    • 4.5 클래스 확장
    • 4.6 클래스 심화
      • 4.6.1 스태틱 멤버
      • 4.6.2 접근 제어자
      • 4.6.3 접근자
      • 4.6.4 추상 클래스
    • 4.7 인터페이스와 클래스의 관계
    • 4.8 맺으며
  • 05 타입의 호환성
    • 5.0 들어가며
    • 5.1 기본 타입의 호환성
    • 5.2 객체 타입의 호환성
    • 5.3 함수 타입의 호환성
    • 5.4 클래스의 호환성
    • 5.5 제너릭의 호환성
    • 5.6 열거형의 호환성
    • 5.7 맺으며
  • 06 타입 시스템 심화
    • 6.0 들어가며
    • 6.1 타입 좁히기
    • 6.2 타입 추론
    • 6.3 타입 단언
    • 6.4 집합으로서의 타입
    • 6.5 서로소 유니온 타입
    • 6.6 맺으며
  • 07 고급 타입
    • 들어가며 (7월 2일 공개)
  • 08 모듈과 네임스페이스
    • 들어가며 (7월 16일 공개)
  • 09 실제 프로젝트에서 사용하기
    • 들어가며 (7월 30일 공개)
  • 10 유용한 라이브러리 소개
    • 들어가며 (8월 13일 공개)
    • 맺으며
  • 부록 II : 자바스크립트 언어 생태계
    • ECMAScript 언어 표준과 TC39
    • TC39 프로세스
    • 실제 예시 - Array.prototype.includes
    • 타입스크립트와 ECMAScript
Powered by GitBook
On this page
  • 언어 명세
  • 컴파일러
  • 생태계
  1. 01 타입스크립트 소개

1.3 타입스크립트의 구성요소

Previous1.2 왜 타입스크립트인가Next1.4 타입스크립트의 역사

Last updated 6 years ago

우리가 “타입스크립트”라고 지칭할 때, 실제로는 다양한 구성 요소의 합을 뭉뚱그려 부르는 것에 가깝다. 이 구성 요소들을 분류할 수 있는 단 하나의 올바른 기준은 없지만, 다음과 같이 큼지막한 덩어리들로 나눠 볼 수 있겠다.

언어 명세

가장 먼저, 타입스크립트 언어 명세(specification)가 있다. 이 명세는 .ts(또는 .tsx) 확장자를 갖는 타입스크립트 코드가 어떤 의미를 갖는지에 대한 약속이다. 예를 들어 아래와 같은 코드를 생각해보자.

const a: number = 32;
const b: string = 3; // error

타입스크립트를 아는 프로그래머라면 누구나 위의 코드를 읽고 다음과 같이 예측할 수 있다.

이 코드는 a 변수는 number 타입이고 32라는 값을 가지며, b 변수는 string 타입이고 3이라는 값을 갖는다. 그런데 3은 string 타입이 아니니까 여기선 에러가 나야한다.

이 때 서로 다른 프로그래머는 각기 다른 생각을 가짐에도 모두 동일한 예측을 할 수 있다. 그 이유는 코드가 어떤 의미를 갖고 어떻게 동작해야하는지를 정확히 기술해 둔 문서, 즉 언어 명세가 존재하기 때문이다.

사실 2018년 5월 기준으로, 타입스크립트 명세는 그다지 잘 관리되고 있지 않다. 타입스크립트는 매우 활발하고 빠르게 발전하고 있는 프로젝트이다. 그런 인기에 비해 노동력이 부족한 탓인지, 2018년 5월 기준 최신 버전이 2.8임에도 깃허브에 올라온 명세 문서는 아직 2016년 1월에 작성된 1.8 버전에 머물러 있다.

이 오래 전부터 꾸준히 생성되어 현재 매우 많이 열려있는 것으로 미루어보아 코어 개발팀 역시 문제는 인지하고 있는 것으로 보인다. 부디 빠르게 개선이 되길 바란다.

컴파일러

명세는 중요하지만 기본적으로 규약일 뿐 실제 구현체가 아니다. 명세가 업데이트 되지 않고 있더라도 구현체, 즉 타입스크립트 컴파일러(tsc)는 꾸준히 업데이트 되어왔다. 그 때문에 타입스크립트 버전이 꾸준히 올라가고 사람들은 새 버전을 별 문제 없이 사용할 수 있다. 타입스크립트 컴파일러는 타입스크립트 코드를 입력으로 받아, 명세에 맞게 해석한 후 대응되는 자바스크립트 코드를 출력으로 내뱉는다.

컴파일러는 많은 부분의 합으로 이루어진 복잡한 프로그램이다. 대표적인 부품으론 코드를 읽고 구문을 해석하는 파서(parser), 타입 정보에 모순이 없는지 검사하는 타입 검사기(type checker), 그리고 브라우저가 실행 가능한 자바스크립트 파일을 뱉어내는 에미터(emitter) 등이 있다. 대부분의 사용자는 컴파일러의 사용법을 아는 것으로 충분하지만, 혹 컴파일러의 내부 구조가 궁금하다면 를 참조할 것을 추천한다.

생태계

마지막으로 광의에서 타입스크립트를 구성한다 할 수 있는 생태계가 있다. 타입스크립트의 코어 개발자를 비롯한 수많은 컨트리뷰터, 타입스크립트를 지원하는 도구, 타입스크립트로 쓰여진 라이브러리, 개발자 커뮤니티 등이 여기에 해당한다. 아무리 디자인이 훌륭하고 뛰어난 아이디어를 구현한 언어여도 커뮤니티 형성에 실패하면 시들기 마련이다. 타입스크립트는 이 점에 많은 공을 들였고, 현재로선 아주 크게 성공했다.

“Spec” 라벨이 달린 이슈들
관련 위키 문서