이번 장에서는 타입시스템에 대한 요약본을 남겨두려한다. 책을 읽고 정리한거라 참고 해주면 좋을거같다

 

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

타입 에너테이션

  • 변수나 상수 혹은 함수의 인자와 반환 값에 타입을 명시적으로 선언해서 어떤 값이 저장 될 것인지 컴파일러에게 알려주는 것

구조적 타이핑

  • 프로그래밍언어에서 값이나 객체는 하나의 구체적인 타입을 가지고 있다는 것을 구조적 타이핑이라함
  • 또 다른말로 구체화한 타입 시스템이라고도 함

구조적 서브 타이핑

타입스크립트의 타입

  • Typescript는 값의 집합 이라고도 표현함
  • 특장 값에 많은 집합에 포함될 수 있음
  • 예를 들면, 타입스크립트에서는 특정 값이 String or number 타입을 동시에 가질수도 있음

그래서 구조적 서브 타이핑이 뭔데?

  • 집합으로 나타낼 수 있는 타입스크립트의 타입시스템을 지탱하고 있는 것을 말함
  • 이름이 다른 객체라도 가진 속성이 동일하면 타입스크립트는 서로 호환이 가능함

명목적 타이핑 vs 덕 타이핑 vs 구조적 타이핑

명목적 타이핑

  • 타입의 구조가 아닌 타입의 이름만을 가지고 구별 하는 것
  • C++, Java가 대표적

덕 타이핑

  • 어떤 함수의 매개변수에 올바르게 주어지면, 그 값이 어떻게 만들어졌는지 신경쓰지 않고 사용하는 개념
  • 자바스크립트가 대표적
  • 동적 타입에 주로 사용

구조적 타이핑과 덕타이핑의 공통점

  • 객체가 가진 속성을 기반으로 타입을 검사함
  • 둘다 모두 객체 변수, 메서드 같은 필드를 기반으로 타입을 검사함

구조적 타이핑과 덕타이핑의 차이점

  • 타입을 검사하는 시점에 차이가 있음
  • 덕타이핑은 런타임에 검사를 하고, 구조적 타이핑은 컴파일 타임에 타입체커가 타입을 검사함

점진적 타입 확인

  • 컴파일 타임에 타입을 검사하면서, 필요에 따라 타입 선언 생략을 허용하는 방식
  • 타입을 지정한 변수와 표현식은 정적으로 타입으로 검사하지만, 타입선언이 생략되면 동적으로 검사를 함
  • 타입을 생략하게 되면 암시적 타입 변환이 일어남

값 vs 타입

  • 프로그램이 처리하기 위해 메모리에 저장하는 모든 데이터를 말함
  • 문자열, 숫자, 변수, 매개변수, 객체, 함수가 이에 해당함
  • 할당 연산자인 =으로 작성함

타입

  • 타입 선언(:) or 단언 문(as)으로 작성됨

값과 타입의 공통점

  • 타입스크립트에서 별도의 네임스페이스에 존재함

값과 타입 공간에 동시에 존재하는 것

  • class
  • enum

위의 2개가 런타임에서 동작하는 방식

class

  • 값 공간에서 class는 함수 값으로 동작을 함
    • 생성자 함수이기 때문에, 함수로 동작을 함

enum

  • 런타임에 객체로 변환하는 값, 런타임에 실제 객체로 존재하며, 함수로도 표현이 가능함
  • 클래스처럼 타입 공간에서 타입을 제한하는 역할, 타입스크립트 런타임에서 실제 값으로 쓰임

타입스크립트에서 자바스크리븥의 키워드가 해석되는 방식

키워드 값 타입

class Y Y
cont, let, var Y N
enum Y Y
function Y N
interface N Y
type N Y
namespace Y N

타입을 확인 하는 방법

typeof

  • 연산하기전에 피연산자의 데이터 타입을 나타내는 문자열을 반환함
  • 연산자가 반호나하는 값은 자바스크립트의 7가지 기본 데이터 타입, 호스트 객체, object 객체가 될 수 있음

typeof 값에서 쓰일 때 vs 타입에서 쓰일 때

→ typeof 연산자는 값에서 쓰일 때와, 타입에서 쓰일 때 반환값이 다르므로 주의가 필요함

값에서 쓰일 때

  • 자바스크립트 런타임의 typeof 연산자가 됨
  • 값에서 사용될 때는 자바스크립트의 typeof 연산자와 동일하게 동작함

타입에서 쓰일 때

  • 값을 읽고 타입스크립트의 타입을 반환함

instanceof

  • 프로토타입 체이닝 어딘가에 생성자의 프로토타입 속성이 존재하는지 판단할 수 있음

타입 단언

  • 타입을 강제할 수 있는 문법 이며, as 키워드를 사용하면 됨
  • 개발자가 해당 값의 타입을 더 잘 파악할 수 있을 때 사용함
  • 강제 형변환과 유사한 기능

이외

  • 타입 가드라는 패턴도 존재함

+ Recent posts