Contravariance
[Type Covariance](https://texonom.com/type-covariance-b096a5a4fdda4c42a01a155a80951a35) [Bivariance](https://texonom.com/bivariance-23f6c2bc5c95466b9c6b0c8ab23b10e4) [Bivariance](https://texonom.com/bivariance-23f6c2bc5c95466b9c6b0c8ab23b10e4) 


반공변성
strictFunctionTypes mode in which function type parameter positions are checked contravariantly instead of bivariantly
### 함수 파라미터는 반공변적으로 구현하는게 당연한 것 같은데, 왜 그전에는 반공변적으로 동작하지 않았을까
즉 이변적으로 동작했을까
하지막 직관적으로는 공변적으로 타입이 작동하는 게 맞다
그래서 c#이나 scala에서는 공변적이나 반공변성을 위한 문법이 있지만, 이런 구현의 어려움과 복잡성 때문에 이변성을 처음에 택했다







Logger<string | number> 가 오히려 Logger<number> 의 서브타입이 되는 셈입니다. 이런 식으로 동작하는 것을 반공변성

-strictFunctionTypes 를 사용하면 **함수의 파라미터가 모두 반공변적으로 동작 **



> [공변성이란 무엇인가 / seob.dev](https://seob.dev/posts/%EA%B3%B5%EB%B3%80%EC%84%B1%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/)





