한 입 크기로 잘라먹는 Ts - 함수 타입의 호환성

한 입 크기로 잘라먹는 Ts - 함수 타입의 호환성

·

2 min read


이정환 님의 한 입 크기로 잘라먹는 타입스크립트 를 수강한 내용 입니다.

함수 타입의 호환성이란 ?

함수 타입의 호환성이란 특정 함수 타입다른 함수 타입으로 괜찮은지 판단하는 것을 의미합니다.

다음 2가지 기준으로 함수 타입의 호환성을 판단하게 됩니다.

  1. 두 함수의 반환 값 타입이 호환되는가?

  2. 두 함수의 매개변수의 타입이 호환되는가?

1. 두 함수의 반환 값 타입이 호환되는가 ?

A와 B 함수 타입이 있다고 가정할 때

  • A 반환값 타입이 B 반환값 타입의 슈퍼타입이라면 두 타입은 호환됩니다.

1

A의 반환값 타입은 Number, B의 반환값 타입은 Number Literal 입니다.

  • 따라서 변수 a에 b를 할당하는 것은 가능하나 반대로는 불가능 합니다.(다운 캐스팅 ❌)

  • b = a 를 넣는 것은, a가 b보다 큰 범주이므로 다운 캐스팅이 일어납니다.

2. 두 함수의 매개변수의 타입이 호환되는가?

2-1. 매개변수의 개수가 같을 때

2

  • c = d 는 D 타입을 C 타입으로 취급하겠다는 말 입니다.

  • C 타입은 Number, D 타입은 Number Literal 입니다.

따라서 C 타입이 D 슈퍼타입이므로 D를 C로 취급하는것은 불가능하나 반대로는 가능합니다.

이는 반환값 타입과 반대됩니다. 마치 다운캐스팅을 허용하는 것 같아 보입니다.

좀 더 이해를 돕기 위해 객체 타입인 경우를 살펴보겠습니다.

3

animalFunc에 dogFunc를 할당하는 것은 불가능합니다.

  • Animal 타입이 Dog 타입의 슈퍼타입 입니다.(조건이 더 적기 때문)

animalFunc = dogFunc를 코드로 표현해보면 다음과 같습니다.

4

dogFunc 함수 내부에서는 name과 color 프로퍼티에 접근합니다.

  • 따라서 이렇게 할당이 이루어지게 되면 animal.color 처럼 존재할거라고 보장할 수 없는 프로퍼티에 접근하게 됩니다.

  • 그래서 업 캐스팅을 차단 합니다.

반대로 dogFunc = animalFunc 를 코드로 표현하면 다음과 같습니다.

5

  • animalFunc 함수 내부에서는 name 프로퍼티에만 접근 합니다. 이 코드는 안전합니다.

정리하자면, 매개변수의 개수가 같은 경우 업 캐스팅은 ❌, 다운 캐스팅 ✅

6

2-2. 매개변수의 개수가 다를 때

7