타입은 집합이다

woodstock·2023년 12월 9일
0
post-thumbnail

타입은 집합이다

타입스크립트의 '타입'은 사실 여러개의 값을 포함하는 '집합'이다.
집합은 동일한 속성을 갖는 여러개의 요소들을 하나의 그룹으로 묶은 단위를 말한다.


그렇다면, 오직 하나의 값만 포함하는 타입인 Number Literal타입은 어떤 집합일까?

let num: 20 = 20;

이 타입은 아래의 그림과 같이 딱 하나의 값만 포함하는 아주 작은 집합이라고 볼 수 있다.


그리고, 이러한 Number Literlal 타입은 Number 타입이라는 거대한 집합에 포함되는 부분집합이기도 하다.


타입스크립트의 모든 타입들은 집합으로써 서로 포함하고 또 포함되는 관계를 가진다.
Number 타입처럼 다른 타입을 포함하는 타입은 슈퍼타입(부모타입이라고 부르며, 그 반대는 서브타입(자식타입)이라고 한다.


타입 호환성

타입호환성이란, A와 B 두 개의 타입이 존재한다고 할 때 A타입의 값을 B타입으로도 취급해도 괜찮은지 판단하는 것을 의미한다.
A타입의 값이 B타입의 값으로 취급되어도 괜찮다면 호환된다고 하며, 그 반대라면 호환되지 않는다고 한다.

위 그림을 보면, 서브타입인 Number Literal 타입의 값을 슈퍼타입인 Number 타입의 값으로 취급하는 것은 가능하지만 그 반대는 불가능하다.
Number 타입이 더 큰 타입이기 때문이다.

다음의 코드를 보면,

let num1: number = 10;
let num2: 10 = 10;

num1 = num2;

num1의 타입이 num2의 타입보다 큰 타입이기 때문에 num1num2의 값을 저장하는 것이 가능하다.

하지만, 다음과 같이 반대의 경우는 불가능하다.

이 때, 서브타입의 값을 슈퍼타입의 값으로 취급하는 것을 업 캐스팅이라고 하며, 그 반대의 경우는 다운 캐스팅이라고 한다.

정리하자면, 타입스크립트에서 업캐스팅은 모든 상황에 가능하지만 다운 캐스팅은 대부분의 상황에서 불가능하다고 할 수 있다.

profile
해내는 사람

0개의 댓글