타입 호환성

히니·2025년 9월 1일

Typescript

목록 보기
2/2

타입은 집합이다.

타입은 여러개의 값을 포함하는 '집합'이다. number라는 집합은 여러개의 숫자 리터럴로 이루어진 집합이다.
e.g) -20, Infinity, 1234123,2,....

예를 들어 20이라는 타입에 속하는 요소인 숫자 20은 20이라는 타입 외에도 number라는 타입에 속한다.
즉 Number 타입이라는 거대한 집합에 포함되는 부분집합으로 number literal Type이 존재한다.

그리고 이러한 넘버타입처럼 다른타입을 포함하는 타입을 슈퍼타입(부모타입)이라고 부른다.
반대로 숫자리터럴 처럼 서브타입(자식타입)이라고 부른다.

타입 호환성

타입 호환성이란 A와 B라는 타입이 존재할시 A타입을 B타입으로 취급해도 괜찮을지 판단하는 것을 의미한다.
만약에 호환이 된다면 A는 B로 타입을 호환된다고 한다.
예를 들어 숫자타입과 숫자 리터럴 타입을 예시로 들 수 있다.

숫자 타입은 -> 숫자리터럴 타입으로 호환되지 않는다. 반대로 숫자리터럴 타입은 number타입으로 호환된다.


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

num1 = num2; // 문제 되지 않는다
num2 = num1; // 호환되지 않기 떄문에 에러남

왜 에러가 나는 걸까?
num2는 숫자 리터롤 타입이고 num1은 number 타입이다. 즉 숫자리터럴 타입에 더 큰 슈퍼타입을 할당할 수 없다. 반대로 num1은 숫자 타입이고 num2는 숫자리터럴 타입이기에 숫자타입에(슈퍼타입) 숫자 리터럴 타입(서브타입)으로 할당 할 수 있다.

그리고 특별히 서브타입의 값을 슈퍼타입으로 취급하는것은 업 캐스팅이라고 부르고 반대는 다운 캐스팅이라고 부른다.

profile
안녕하세요

0개의 댓글