Part2_Type
김호준
책 읽기

타입이란?

자료형

  1. undefined
  2. null
  3. Boolean
  4. String
  5. Symbol
  6. Numeric(number, bigint)
  7. Object

프로그래밍에서의 타입은 수학의 집합과 유사하다. 타입은 값이 가질 수 있는 유효한 범위의 집합을 말한다.

타입스크립트는 정적 타입 언어이다.

  • 컴파일타임에 타입 에러를 발견할 수 있다.

컴파일 타임과 런타임

기계(컴퓨터,엔진)가 소스코드를 이해할 수 있도록 기계어로 변환되는 시점을 컴파일타임이라고 하며 이후 변환된 파일이 메모리에 적재되어 실행되는 시점을 런타임이라고 부른다. 이후 변환된 파일이 메모리에 적재되어 실행되는 시점을 런타임이라고 부른다.

약타입, 강타입

  • 강타입
    • 파이썬, 루비, 타입스크립트
  • 약타입
    • C++, 자바, 자바스크립트

강타입은 한 타입의 값이 다른 타입으로 암시적으로 변환되지 않는다.

그래서 자바스크립트 같은 약타입 언어는 런타임에서 발생할 수 있는 에러를 예측하고 방지하는 코드를 작성하는 것이 프로그램을 안전하게 만드는데 도움이 된다.(타입스크립트 사용하자)

타입스크립트의 타입 시스템

어떤 타입을 사용하는지를 컴파일러에 명시적으로 알려줘야 하는 타입 시스템이 있고, 자동으로 타입을 추론하는 타입 시스템도 있다. 타입스크립트는 두 가지 타입 시스템의 영향을 모두 받았다.

  1. type annotation
  • 어떤 타입 값이 저장될 것인지를 컴파일러에 직접 알려주는 것.
  1. 구조적 타이핑
  • 구조로 타입을 구분한다.

    보통의 타입 언어는 타입을 명목적으로 구체화하는데, 반면 타입스크립트는 구조로 타입을 구분하기 때문이다.(타입의 이름으로 구분하지 않는다.)

  1. 구조적 서브타이핑
  • 타입을 동시에 가질 수 있는 것

구조적 타이핑의 한계를 극복하고자 유니온 같은 방법이 생겨났다.

  1. 점진적 타입 확인
  • 필요에 따라 타입을 생략할 수도 있고 점진적으로 추가할 수도 있다.
  1. 타입스크립트는 자바스크립트의 슈퍼셋이다.
  • 상위집합이다.
  • 모든 자바스크립트 코드는 타입스크립트라고 볼 수 있지만 반대의 경우는 그렇지 않다.
  • 값 공간과 타입 공간의 이름은 서로 충돌하지 않고 런타임에서 타입으로 선언한 내용은 제거 된다.
    • 심볼은 값과 타입 공간에 동시에 존재함
    • 클래스는 값과 타입 공간 모두에 포함될 수 있다.
    • enum은 런타임에 실제 객체로 존재하며, 함수로 표현할 수도 있다.

typeof

값 공간과 타입 공간에서 쓰일 때의 역할이 다르다.

  • 값에서 사용되면 typeof 연산자
  • 타입에서 사용되면 값을 읽고 타입스크립트 타입을 반환한다.

타입 단언

  • as 붙여서 타입 강제하면 된다.